我想根据我的数据接口<asp:DropDownCheckBoxes ID="mydropdown0" runat="server" AppendDataBoundItems="true" UseButtons="true"></asp:DropDownCheckBoxes>
,TRecursive
和IOne
创建递归的泛型类型ITwo
,如下所示。
结果类型IThree
应与TRecursive<IOne>
具有相似的关系,但不同的值类型,例如以下示例中为IOne
。
boolean
当我需要在相关类型中进行类型检查时,我无法使interface IOne {
pk: number;
name: string;
two: ITwo;
}
interface ITwo {
pk: number;
name: string;
three: IThree;
}
interface IThree {
pk: number;
name: string;
}
type TRecursive<T> = {
[P in keyof T]?: TRecursive<T[P]> | boolean;
};
const test: TRecursive<IOne> = {
pk: true,
name: true,
two: {
pk: true,
name: true,
anything: true, // type error as expected
three: {
pk: true,
name: true,
anything: true // no error - why?
}
}
};
正常工作。
我添加了未在我的数据类型中定义的键typescript@2.3.3
,所以我希望typescript在这里向我显示错误。正如预期的那样,我在一个深度(内部键anything
)中看到错误,但相同的键不会触发两个级别的错误(在键two
内)。
为什么?有什么办法可以用打字稿来实现吗?
答案 0 :(得分:0)
这在TS中很常见。它会先停在第一个错误处,然后再继续寻找下一个错误。
const test: TRecursive<IOne> = {
pk : true,
name: true,
two : {
pk : true,
name : true,
// anything: true,
three: {
pk : true,
name : true,
anything: true, // error
},
},
}