typescript 如何枚举接口键,使新的接口的值取决于键

0qx6xfy6  于 2023-05-30  发布在  TypeScript
关注(0)|答案(1)|浏览(150)

如何迭代接口键,使新的接口的值是依赖于键。

type IParse<T> = {
    [K in keyof T as K extends string ? K : never]: string // How to make if K === 'a' the type should be number
}

interface X {
    a: number
    b: string
    c: string[]
    d: number[]
}

type Result = IParse<X>

// Actual result

interface Actual {
    a: string
    b: string
    c: string
    d: string
}

// Expected result

interface Expected {
    a: number
    b: string
    c: string
    d: string
}

Playground

0sgqnhkj

0sgqnhkj1#

你可以通过在你所拥有的值部分添加一个条件来做到这一点:

type IParse<T> = {
    [K in keyof T as K extends string ? K : never]: 
        K extends "a" ? number : string; // <======================
};

interface X {
    a: number;
    b: string;
    c: string[];
    d: number[];
}

type Result = IParse<X>;
//   ^? -- type Result = {a: number; b: string; c: string; d: string; }

Playground链接

相关问题