You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保字符串类型的组件Prop值为指定对象的键?

类型校验方案选型:第三方Input组件的字段名类型约束

背景

第三方包中Input组件的简化Prop定义:

interface InputProps {
  name: string,
  value?: string
}

我的表单简化类型定义:

interface IForm {
  name: string,
  email: string,
}

type KForm = keyof IForm

存在的问题:当我故意传入错误字符串并通过as KForm强制类型转换时,TypeScript未触发报错:

...
<Input name={'emailx' as KForm} />
...

可选的类型校验方案

我整理了四种可行的类型校验方案,均能避免上述强制转换绕过校验的问题:

  • 自执行函数
    通过即时执行的类型约束函数校验传入值:

    ...
    <Input name={((k: KForm) => k)('email')} />
    ...
    
  • 抽离独立函数
    单独定义一个类型约束函数,复用性更强:

    const getFieldName = (k: KForm) => k;
    

    使用方式:

    ...
    <Input name={getFieldName('email')} />
    ...
    
  • 声明独立变量
    提前声明带类型约束的变量,直接传入组件:

    const emailField: KForm = 'email';
    

    使用方式:

    ...
    <Input name={emailField} />
    ...
    
  • 封装包装组件
    对第三方Input组件进行封装,直接约束name字段的类型:

    interface WrapperInputProp extends InputProps {
      name: KForm
    }
    

    使用方式:

    ...
    <WrapperInput name={'email'} />
    ...
    

补充说明

经测试,上述四种方案的性能差异可忽略不计。

内容的提问来源于stack exchange,提问作者Ras Lorenz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:21:38