首页 > 解决方案 > Typescript 基于数组推断对象键

问题描述

我正在尝试根据数组的值创建一个具有特定键的对象。

这是代码:

type AllowedKeys = "foo" | "bar" | "baz"

interface Options {
    keys: AllowedKeys[]
}

interface AllTypesDeclaration {
    foo: string[];
    baz: object[];
    bar: number[];
}

function createObj(arg: Options): Pick<AllTypesDeclaration, typeof arg.keys[number]> {
    return {}
}

const myObj = createObj({ keys: ['baz'] })

// This should work:
myObj.baz

// This should fail:
myObj.foo
myObj.bar

如您所见,我尝试使用 来执行此操作Pick,但这似乎不起作用。

演示:这里

标签: javascripttypescript

解决方案


为此,您将需要泛型,否则键的类型将不受输入的限制。

function createObj<T extends AllowedKeys[]>(arg: { keys: T })
    : Pick<AllTypesDeclaration, typeof arg.keys[number]> {
    return {}
}

推荐阅读