typescript - 打字稿:将 keyof 与条件加通用子类型相结合
问题描述
在@jcalz 之后,我重写了这个问题。
请参阅此处的工作示例: TS Playground
我想安全地键入initFields
下面的方法。以便
a) 仅接受字段prop
(例如,pleaseIgnoreMe
不允许使用该属性)。
b) 仅允许 Field 包含的类型为val
。例如,bar1 只允许使用字符串
class Field<T> {
constructor(public value: T) {}
}
class Item {
initFields(fields: { [P in keyof this]?: any }) {
Object.entries(fields).forEach(
([prop, val]) => ((this[prop as keyof this] as any) = new Field(val))
);
}
}
class Foo extends Item {
bar1!: Field<string>;
bar2!: Field<number>;
pleaseIgnoreMe = "";
init() {
this.initFields({
bar1: "foo",
bar2: 42,
});
}
}
const foo = new Foo();
foo.init();
console.log(foo.bar1.value); // "foo"
解决方案
推荐阅读
- mysql - 将完整日期字符串转换为日期 mysql
- c# - 使用 SignalR 和 StackExchangeRedis 通信 web 应用程序和 api 项目
- laravel - Laravel 社交名媛指定 facebook 图形版本
- javascript - 如何在 react-admin 中访问自定义组件中的表单数据?
- php - 如何使用php检查给定的日期时间是否早于当前日期时间
- javascript - 如何使用 JavaScript 获取网页列 innerText?
- mongodb - 有什么方法可以更新mongodb中的数据
- java - 如何在 Java 代码中实现 Scala Trait
- segmentation-fault - 分段错误 - fortran 中的无效内存引用问题
- ruby-on-rails - 当其中有数据时,为什么这个数组元素会返回 nil?