英文:
Can I return an Interface within an Enum
问题
以下是翻译好的部分:
我得到以下错误:
- 类型 '{ serial: string; }' 不能赋值给类型 'DataType'。(2322)
- 无法赋值给 'DataValidated',因为它是一个只读属性。(2540)
英文:
Can I return an Interface within an Enum?
const PREFIX: string = 'TEST';
interface DataValidated {
serial: string;
}
enum DataType {
Invalid,
DataValidated
}
class DataValidate {
validate(data: string) : DataType {
if (data.startsWith(PREFIX)) {
return DataType.Invalid;
}
return DataType.DataValidated = {
serial: data,
};
}
}
I am getting the following errors:
- Type '{ serial: string; }' is not assignable to type 'DataType'.(2322)
- Cannot assign to 'DataValidated' because it is a read-only property.(2540)
答案1
得分: 2
枚举在TS中无法包装值。请将返回类型更改为具有区分联合类型:
interface DataInvalid {
type: DataType.Invalid;
}
interface DataValidated {
serial: string;
type: DataType.DataValidated;
}
interface Data extends DataValidated | DataInvalid {}
class DataValidate {
validate(data: string): Data {
if (data.startsWith(PREFIX)) {
return { type: DataType.Invalid };
}
return {
type: DataType.DataValidated,
serial: data,
};
}
}
这样编译器将能够推断出是否有数据,当您在data.type
进行测试时。
英文:
Enums cannot wrap values in TS. Make your return type a discrimated union :
interface DataInvalid {
type: DataType.Invalid;
}
interface DataValidated {
serial: string;
type: DataType.DataValidated;
}
interface Data : DataValidated|DataInvalid
class DataValidate {
validate(data: string) : Data {
if (data.startsWith(PREFIX)) {
return {type: DataType.Invalid};
}
return = {
type: DataType.DataValidated
serial: data,
};
}
}
That way the compiler will able to infer if there is data, when you're testing for data.type
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论