【问题标题】:Why does my custom type evaluate to boolean?为什么我的自定义类型评估为布尔值?
【发布时间】:2022-11-27 22:16:01
【问题描述】:
type IsFirstTrue<T extends unknown[]> =
  T extends [infer First,  ...infer Rest] 
  ? First extends true
    ? true
    : false
  : false

// let a: boolean
let a: IsIndexedTypeTrue<[boolean]>

我正在尝试创建一个类型 IsFirstTrue,它检查数组类型的第一个元素是否为 true 类型。

对于类型 [boolean] 作为输入,结果类型的计算结果应为 false,因为它的第一个类型不是 true 类型,但它的计算结果为 boolean,这很奇怪,因为在代码中 boolean 类型甚至没有说明,只有truefalse。为什么会这样?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    我想你可能正在寻找这样的东西:

    TS Playground

    type IsFirstTrue<T extends readonly unknown[]> =
      T extends [true, ...readonly unknown[]]
        ? true
        : false;
    
    declare const a: IsFirstTrue<[boolean]>;
                //^? const a: false
    
    declare const b: IsFirstTrue<[true]>;
                //^? const b: true
    
    declare const c: IsFirstTrue<[false]>;
                //^? const c: false
    
    declare const d: IsFirstTrue<[string]>;
                //^? const d: false
    
    declare const e: IsFirstTrue<[number]>;
                //^? const e: false
    
    declare const f: IsFirstTrue<[true, number]>;
                //^?  const f: true
    
    // ...etc.
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2021-03-22
      • 2011-08-28
      • 2010-10-05
      • 2011-07-31
      • 2012-11-22
      • 2012-04-28
      相关资源
      最近更新 更多