Скажите, у меня есть это:
type TypeMapping = {
Boolean: boolean,
String: string,
Number: number,
ArrayOfString: Array<string>,
ArrayOfBoolean: Array<boolean>
}
export interface ElemType {
foo: keyof TypeMapping,
default: valueof TypeMapping
}
вместо использования any
по умолчанию, я хочу условно определить его, я попробовал это:
export interface ElemType<T extends TypeMapping> {
foo: keyof T,
default: T
}
но это не совсем правильно, кто-нибудь знает правильный способ сделать это?
если неясно, для любого данного объекта, имеющего тип ElemType, ключ, на который указывает foo, должен соответствовать значению, на которое указывает foo. Например, это действительно:
{
foo: 'String',
default: 'this is a string'
}
но это не так:
{
foo: 'Boolean',
default: 'this should be a boolean instead'
}
, поэтому тип поля по умолчанию условный для значения / типа поля типа.
Вкратце , если foo
равно 'ArrayOfBoolean'
, тогда default
должно быть: Array<boolean>
. Если foo
равно 'Number'
, то по умолчанию должно быть number
, если foo равно 'Boolean'
, то по умолчанию должно быть boolean
и т. Д. И т. Д.