我正在使用打字稿,现在定义一个看起来像这样的接口:
interface SelectProps<T> {
options: T[];
labelKey: keyof T;
valueKey: keyof T;
}
T可以是任何形式的对象,但它必须包含标签和字符串键,因此我想强制
T[labelKey]
和T[valueKey]
为字符串。我怎样才能做到这一点? 最佳答案
type Option<LabelKey extends string, ValueKey extends string> =
Record<string, any> & Record<LabelKey | ValueKey, string>
interface SelectProps<LabelKey extends string, ValueKey extends string> {
options: Option<LabelKey, ValueKey>[];
labelKey: LabelKey;
valueKey: ValueKey;
}
const props: SelectProps<'foo', 'bar'> = {
options: [{ foo: '', bar: '', extra: 3 }],
labelKey: 'foo',
valueKey: 'bar'
}