typescript - 检查 value 是否是类型的任何字段
问题描述
在 TypeScript 中,我经常遇到这样一种情况,即我有一个对象的接口:
interface MyType {
property1: string
property2: string
}
当我做这样的事情时:
const handleAction = (key: string, value: string) => {
const myObject: MyType = {property1: "a", property2: "b"}
myObject[key] = value
}
我得到一个错误No index signature with a parameter of type 'string' was found on type 'MyType'
。
我知道我可以将函数输入声明为key: propert1 | property2
,但这很烦人,而且我可能拼写错误。
是否有可能在 TypeScript 中以某种方式指示key: any_field_of_MyType
?
解决方案
您keyof MyType
用于参数的类型:
interface MyType {
property1: string
property2: string
}
const handleAction = (key: keyof MyType, value: string) => {
// −−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^
const myObject: MyType = {property1: "a", property2: "b"}
myObject[key] = value
}
keyof
在手册中高级类型页面的各个部分进行了描述和讨论。
您还可以使用泛型派生value
's 类型:MyType
const handleAction = <Key extends keyof MyType>(key: Key, value: MyType[Key]) => {
const myObject: MyType = {property1: "a", property2: "b"}
myObject[key] = value
}
这对于值的类型变化而不仅仅是存在的接口更有用string
,但是...... (感谢Aleksey L.指出泛型如何使其正常工作!)
推荐阅读
- javascript - 从网站打开资源管理器窗口,在已安装的驱动器上,包括链接参考中的 javascript 以生成路径
- java - 使用属性绑定Javafx获取圆心
- scala - Spark withColumn 和 where 执行顺序
- php - 无法添加 2 个关联数组
- c++ - C++中的嵌套类、继承和共享指针
- javascript - 编写处理来自另一个函数的输出的 PHP 函数时使用什么设计模式?
- influxdb - 如何显示来自 influxDb 的最近 24 小时数据的高峰时段信息
- python - 如何计算任何二维多边形的引力?
- python - 在 sqlalchemy 中根据日期搜索数据
- angular - mat-cell Angular 8中的if else