美文网首页
ts中的infer

ts中的infer

作者: 如果俞天阳会飞 | 来源:发表于2023-01-12 15:56 被阅读0次
    例子
      type Arr = Array<string | number>;
      type ArrInfer<T> = T extends Array<infer U> ? U : T;
      type Res = ArrInfer<Arr>; // string | number
    
     
      type ElementOf<T> = T extends Array<infer E> ? E : T;
      type Tuple = string[];
      type Un = ElementOf<Tuple>; // string
    
      type Arr = (name: string, age: number) => number;
      type ArrInfer<T> = T extends Array<infer U> ? U : T;
      type Res = ArrInfer<Arr>; // (name: string, age: number) => number;
    
    

    infer表示推断占位 infer U 联合起来就表示 这个类型我不确定未知,就暂时表示为 "U"
    那上面的 类型Arr 是符合 Array<infer U>的结构规则,符合的话,就返回U,不符合返回T

    • 获取函数返回值
      type Func = (name: string, age: number) => number;
      type GetFunc<T> = T extends (name: any, age: any) => infer U ? U : T;
      type ResFunc = GetFunc<Func>; // number
    
    • infer 推断出交叉类型
    type T1 = { name: string };
      type T2 = { age: number };
    
      type K2<T> = T extends { a: (x: infer U) => void; b: (x: infer U) => void }
        ? U
        : never;
    
      interface Props {
        a: (x: T1) => void;
        b: (x: T2) => void;
      }
    
      type k3 = K2<Props>;
    

    相关文章

      网友评论

          本文标题:ts中的infer

          本文链接:https://www.haomeiwen.com/subject/pflwcdtx.html