【发布时间】:2019-02-10 00:44:59
【问题描述】:
说我有这个:
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'
}
所以默认字段的类型是以类型字段的值/类型为条件的。
简而言之,如果foo 是'ArrayOfBoolean',那么default 应该是:Array<boolean>。如果foo 是'Number',那么默认应该是number,如果foo 是'Boolean',那么默认应该是boolean,等等
【问题讨论】:
-
我更新了 OP,问题似乎有所不同,或者至少该问题的答案不够充分
标签: typescript tsc typescript3.0