首页 > 解决方案 > 打字稿推断一个属性的键并在另一个属性中使用它们

问题描述

如何推断属性“objects”的对象的键并将它们用作另一个属性“onObject”的函数参数中的约束?我事先不知道密钥,它们是动态定义的。

interface Foo <Objects extends {[name: string]}: Bar = {}> {
    objects: Objects;
    onObject(name: keyof Objects): void;
}

const foo: Foo = {
    objects: {
        "a": ...,
        "b": ...,
    },
    onObject: (name: "a" | "b") => { // put constraint "a" | "b" here
        ...
    }
}

标签: typescripttypescript-typings

解决方案


Typescript 不会推断变量的类型参数,但是您可以使用函数来获得所需的推断行为:

function makeFoo<T extends { [name: string]: any }>(o: Foo<T>) {

}

interface Foo<Objects extends { [name: string]: any } = {} > {
    objects: Objects;
    onObject(name: keyof Objects): void;
}

const foo = makeFoo({
    objects: {
        "a": 0,
        "b": "...",
    },
    onObject: (name) => { // name: "a" | "b"

    }
})

游乐场链接


推荐阅读