Typescript: выводить тип без расширения в области интерфейса
Я не уверен, достаточно ли это декларативно, но мне нужно вывести тип внутри области интерфейса и использовать его в той же области, что и аргумент метода. Вот простой пример
interface Prop {
x: infer U,
// ^^^^^^^ store type coming from 'x'
validate: (x: U) => U
// ^ use type
}
interface IState {
[key: string]: Prop
}
и использовать
const state:IState = {
asString: {
x: '',
validate: value => value + ' is string',
// ^^^^^ string
},
asBoolean: {
x: true,
validate: value => !value;
// ^^^^^ boolean
}
}
Это вообще возможно?
1 ответ
Решение
Это не совсем то, что вы хотите, но вы можете сделать:
interface Prop<U> {
x: U,
validate: (x: U) => U
}
function makeProp<U>(x: U, validate: (x: U) => U): Prop<U> {
return { x, validate }
}
const state = {
asString: makeProp('', value => value + ' is string'),
asBoolean: makeProp(true, value => !value)
}
// Here, 'state' is of type: { asString: Prop<string>, asBoolean: Prop<boolean> }