typescript - 与字符串数组声明的键的接口
问题描述
我有一个界面。
interface ICalculateFieldProps {
fields: string[]
set: string
updateFunc: (valuesObj: object, oldValue: any) => any
}
我希望valuesObj
密钥仅限于fields: string[]
项目。
例如,如果传递['width', 'height']
给fields
. 那么valuesObj
一定是
{
height: any
width: any
}
解决方案
...如果传递
['width', 'height']
给fields
...
如果你的意思是在 runtime,你不能使用 TypeScript 的类型系统来做到这一点。TypeScript 在编译时完成它的工作。
当然,您可以在运行时通过以下实现中的运行时检查来执行此操作updateFunc
:
// ...in a class implementing the interface...
updateFunc(valuesObj: object, oldValue: any): any {
if (Reflect.ownKeys(valuesObj).some(key => !this.fields.includes(key))) {
throw new Error(`Invalid property ${key} found in valuesObj.`);
}
// ...
}
...虽然如果fields
是一个Set
而不是一个数组可能会更好。
推荐阅读
- python - 在烧瓶中找不到我的模型的路径
- deployment - 从常规 .zip 文件创建 webdeploy 包
- java - Kotlin“as”的Java同义词是什么?
- mysql - MySql docker 容器,通过终端工作,通过 docker-compose no
- r - R:手动安装存档包时出错
- javascript - 从响应而不是对象获取数组
- c# - EF Core 和运行时定义的架构
- c# - LINQ 按内部列表的属性对外部列表进行排序
- python - Numpy:如何将 (N,N) 和 (N,N,M,M) numpy 数组相乘?
- r - 如何在 r 中创建姓名的 Qrcode 列表