我有这个接口,它只存储另一个接口的密钥(modelKey
)和该键的值(value
):
interface ValueHolder<T, H extends keyof T> {
modelKey: H;
value: T[H];
}
现在我想存储horsePower
来自以下模型,匹配类型为ValueHolder
:
interface Car {
id: number;
horsePower?: number;
date: Date;
};
这看起来像这样:
const test: ValueHolder<Car, keyof Car> = {
modelKey: 'horsePower',
value: 1000,
};
此时不会发生错误,并且它会很好地存储该值。但您也可以传递类型的值Date
:
const test: ValueHolder<Car, keyof Car> = {
modelKey: 'horsePower',
value: new Date(),
};
因为无论出于何种原因,该值都可以接受所提供模型中任何键的所有类型:
(property) ValueHolder<Car, keyof Car>.value: string | number | Date | undefined
我怎样才能使value
界面按键ValueHolder
只接受类型的值undefined | number
,如果您提供modelKey
horsePower
?
Demo https://tsplay.dev/NVgzBm