代码之家  ›  专栏  ›  技术社区  ›  ᴘᴀɴᴀʏɪᴏᴛɪs

有没有办法打印解析的类型脚本类型?

  •  0
  • ᴘᴀɴᴀʏɪᴏᴛɪs  · 技术社区  · 6 年前

    我在读关于 TypeScript 2.8 - Conditional Types 我在typescript文档中看到了很多例子,其中列出了 断然的? 类型的版本作为其旁边的注释:

    type TypeName<T> =
        T extends string ? "string" :
        T extends number ? "number" :
        T extends boolean ? "boolean" :
        T extends undefined ? "undefined" :
        T extends Function ? "function" :
        "object";
    
    type T0 = TypeName<string>;  // "string"
    type T1 = TypeName<"a">;  // "string"
    type T2 = TypeName<true>;  // "boolean"
    type T3 = TypeName<() => void>;  // "function"
    type T4 = TypeName<string[]>;  // "object"
    

    例如 TypeName<true> 实际上是 boolean . 这在更复杂的场景中变得更加有用,在这些场景中,您可以看到您实际构造的类型:

    type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? K : never }[keyof T];
    type FunctionProperties<T> = Pick<T, FunctionPropertyNames<T>>;
    
    type NonFunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T];
    type NonFunctionProperties<T> = Pick<T, NonFunctionPropertyNames<T>>;
    
    interface Part {
        id: number;
        name: string;
        subparts: Part[];
        updatePart(newName: string): void;
    }
    
    type T40 = FunctionPropertyNames<Part>;  // "updatePart"
    type T41 = NonFunctionPropertyNames<Part>;  // "id" | "name" | "subparts"
    type T42 = FunctionProperties<Part>;  // { updatePart(newName: string): void }
    type T43 = NonFunctionProperties<Part>;  // { id: number, name: string, subparts: Part[] }
    

    当对类型产生混淆时,这肯定会帮助我,所以我想知道是否有任何方法可以让编译器提取相同的类型信息?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Titian Cernicova-Dragomir    6 年前

    如果将鼠标悬停在条件类型上,则visual studio代码已经提供了此功能。对于您的示例,它是这样的:

    enter image description here