#typescript
Вопрос:
Приношу извинения за плохое название, мне трудно выразить эту концепцию.
У меня есть такой типаж:
type Foo = {
a: number,
b: string,
c: boolean,
}
Я хочу повторно использовать этот тип следующим образом:
type FooInfo = {
property: keyof Foo,
description: string,
value: Foo[this.property]
}
Идея этого типа заключается в том, что если property
установлено значение a
, то тип value
должен быть Foo[a]
(таким образом, «число»).
Допустимый пример использования этого типа:
const propA = {
property: 'a',
description: 'This is a',
value: 5
}
Я также пытался играть с дженериками, но я хочу, чтобы тип value
был выведен.
Есть ли способ сделать это с помощью машинописного текста?
Ответ №1:
Я думаю, что здесь стоит использовать объединения в сочетании с сопоставленными типами:
type Foo = {
a: number,
b: string,
c: boolean,
}
type Values<T>=T[keyof T]
type FooToFooInfo = {
[Prop in keyof Foo]:{
property:Prop;
description:string;
value:Foo[Prop] // <--- same purpose as Foo[this.property]
}
}
type Result = Values<FooToFooInfo>
Комментарии:
1. Спасибо! хотя это не точный ответ, на самом деле он немного ближе к тому, что я искал.
2. Вы также можете создать вспомогательную функцию и вывести опору значения. Вас интересует такое решение?
3. Я на самом деле хорошо разбираюсь в этом ответе и реализовал его вариант, спасибо! Смотрите здесь: github.com/curveball/a12n-server/pull/332
4. Конечно, никаких проблем