打字稿条件类型内部类型

Posted

技术标签:

【中文标题】打字稿条件类型内部类型【英文标题】: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

我无法理解为什么会这样,以及如何解决它。

【问题讨论】:

【参考方案1】:

您编写的类型说要根据Limited['multiple'] 的类型进行类型计算。该类型是booleanboolean 是否从 true 扩展而来?不,它没有(true 扩展自 boolean,但不是相反)。结果,trunk 获得了 false 类型。

如果您要说multipletrunk 必须都是true,或者都必须是false,那么您可以这样做:

export type Limited = 
  multiple: true;
  trunk: true;
 | 
  multiple: false;
  trunk: false;

或者您也可以使用泛型:

export type Limited<T extends boolean> = 
  multiple: T,
  trunk: T

【讨论】:

以上是关于打字稿条件类型内部类型的主要内容,如果未能解决你的问题,请参考以下文章

打字稿'条件'类型

打字稿:“关注”条件类型

对象打字稿中的条件类型

基于属性的打字稿方法返回类型

具有默认参数值的打字稿条件返回类型

如何在打字稿中访问嵌套条件类型