Есть ли способ заставить значение sub иметь поле, совпадающее с ключом объекта? - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу создать тип, где значение должно соответствовать ключу объекта. Есть ли способ сделать это в машинописи?

type Foo = {
    [key: string]: {
        target: keyof Foo
    }
};

const foo: Foo = {
    a: {target: "b"},
    b: {target: "c"},
    c: {target: "b"},
}

const goo: Foo = {
    a: {target: "any value"}, // I want this to show an error
    b: {target: "c"},
    c: {target: "b"},
}

1 Ответ

0 голосов
/ 20 апреля 2020

Я нашел решение. Но не кажись элегантным.

type Goo<T> = { target: T };
type Foo<K extends string, T extends K> = {[k in K]: Goo<T>};

F({
    a: {target: "a"},
    g: {target: "a"}
});

function F<K extends string, T extends K>(foo: Foo<K, T>) {

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...