假设我有这个:
type TypeMapping = {
Boolean: boolean,
String: string,
Number: number,
ArrayOfString: Array<string>,
ArrayOfBoolean: Array<boolean>
}
export interface ElemType {
foo: keyof TypeMapping,
default: valueof TypeMapping
}
而不是使用any
对于默认情况,我想有条件地定义它,我尝试了以下方法:
export interface ElemType<T extends TypeMapping> {
foo: keyof T,
default: T
}
但这似乎不太正确,有谁知道正确的方法吗?
如果不清楚,对于任何具有 ElemType 类型的给定对象, foo 指向的键必须与 foo 指向的值匹配。例如,这是有效的:
{
foo: 'String',
default: 'this is a string'
}
但这不是:
{
foo: 'Boolean',
default: 'this should be a boolean instead'
}
所以默认字段的类型是有条件的关于类型字段的值/类型。
简洁地, if foo
is 'ArrayOfBoolean'
, then default
应该:Array<boolean>
. If foo
is 'Number'
,那么默认应该是number
,如果 foo 是'Boolean'
那么默认应该是boolean
等等等等