【问题标题】:typescript conditional types inner types打字稿条件类型内部类型
【发布时间】:2022-01-22 13:53:06
【问题描述】:
我定义了以下类型:
export type Limited = {
multiple: boolean;
trunk: Limited['multiple'] extends true ? true : false;
};
我希望将trunk 属性限制为multiple 属性。当前方法使trunk 始终为false。
我无法理解为什么会这样,以及如何解决它。
【问题讨论】:
标签:
typescript
typescript-typings
【解决方案1】:
您编写的类型说要根据Limited['multiple'] 的类型进行类型计算。该类型是boolean。 boolean 是否从 true 扩展而来?不,它没有(true 扩展自 boolean,但不是相反)。结果,trunk 获得了 false 类型。
如果您要说multiple 和trunk 必须都是true,或者都必须是false,那么您可以这样做:
export type Limited = {
multiple: true;
trunk: true;
} | {
multiple: false;
trunk: false;
}
或者您也可以使用泛型:
export type Limited<T extends boolean> = {
multiple: T,
trunk: T
}