有没有一种方法可以在编译时检查打字稿中的kvp有效性

时间:2020-02-10 06:49:02

标签: reactjs typescript

我正在尝试使用fieldDefinitions交叉引用字段ID,然后在验证程序中对其进行检查。但是,由于它们是字符串,所以很容易出错,是否有办法确保字典类型与其键之间的1:1安全映射?不同的组件可能具有不同的字段。

type FieldDefinition = {
    [key: string]: string[]
};

然后我定义我的界面,并在我的自定义表单验证器中签入


const myField: FieldDefinition = {
    address: ['some_type'],
    city: ['some_type']
}

带有使用这些值的功能组件的示例

const ExampleForm: FC = () => {
return(
  <Form formId='someid'>
    <TextInput fieldId='address' />
    <TextInput fieldId='city' />
  <Form/>
);
}

问题源于以下事实:类型定义为string [],可以是任何东西,字段ID的使用方式如下:

if (formData !== undefined) {
          formData.fieldDefinition[payload.value.key] = [
            ...payload.value.value
          ];
        }
      }

TL; DR 我该如何定义fieldid,使它们成为字典类型(键),但编码方式使我可以在编译时检查它们的有效性。

1 个答案:

答案 0 :(得分:0)

我已经解决了我的答案

export interface DefaultProps<K extends object> {
  formId: keyof K;
}

这是一个检查密钥的工作示例 https://codesandbox.io/s/vigilant-tharp-z9xkv 这是工厂的版本 https://codesandbox.io/s/stoic-ellis-e2w1o