我正在使用打字稿,现在定义一个看起来像这样的接口:

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'
}

10-06 07:34