我有这个:
export type FieldType = 'number' | 'boolean' | 'string';
export interface IField {
key: string;
value: any;
type: FieldType;
}
是否可以用其他定义替换values
的{{1}}类型,以便存储在any
属性中的值实际上是value
字段包含的类型。即如果对象在type
属性中具有'string'
值,则type
属性持有的值必须为value
类型(对于string
和{{1} })。
这样可以这样工作:
number
我尝试使用boolean
和const booleanTypeError = <IField>{
key: 'someKey',
value: 'true', // throw error
type: 'boolean'
};
const booleanTypeOK = <IField>{
key: 'someKey',
value: true, // no error
type: 'boolean'
};
const stringTypeOK = <IField>{
key: 'someKey',
value: 'true', // no error
type: 'string'
};
const stringTypeError = <IField>{
key: 'someKey',
value: true, // throw error
type: 'string'
};
,但是由于我一直都在出错,所以运气不佳。我正在使用TypeScript 3.7.5(但我也可以使用3.8)。
答案 0 :(得分:2)
您可以使用已区分的并集
type FieldType = 'number' | 'boolean' | 'string'
type IField = {
key: string;
} & {
value: number
type: 'number'
} | {
value: boolean
type: 'boolean'
} | {
value: string
type: 'string'
}
具有接口
interface Base {
key: string
}
interface Bool extends Base {
value: boolean
type: 'boolean'
}
interface Num extends Base {
value: number
type: 'number'
}
interface Str extends Base {
value: string
type: 'string'
}
type IField = Bool | Num | Str