我想创建一个递归的泛型类型TRecursive,基于我的数据接口IOne、ITwo和IThree,它们的关系如下所示。 TRecursive 的结果类型应该与 IOne 有类似的关系,但不同的值类型,例如下面的示例中的布尔类型。
事情是这样的,当我需要在相关类型中进行类型检查时,我无法使
我添加了一个未在我的数据类型中定义的关键字
为什么会这样?有什么办法可以用typescript实现这个目标吗?
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
正常工作。我添加了一个未在我的数据类型中定义的关键字
anything
,因此我希望typescript在这里显示错误。如预期所见,在一级深度(在关键字two
内部)中我看到了错误,但是同样的关键字在两级深度(在关键字three
内部)中不会触发错误。为什么会这样?有什么办法可以用typescript实现这个目标吗?