javascript - 打字稿:如何从对象中获取属性子集?
问题描述
例子:
type t = {
a1: boolean;
a2: number;
a3: string;
};
const o1 = {
a1: true,
a2: 1,
a3: 'blah',
a4: false,
a5: 'blah blah'
}
const o2: t = o1 as t; // this doesn't work as I expected
如何动态设置 o2 以仅采用适合类型 t 的 o1 属性?
即,保留适合的属性并丢弃其余的属性。在这种情况下,结果相当于
const o2: t = {
a1: o1.a1,
a2: o1.a2,
a3: o1.a3
}
除了动态完成,因为 t 可能会改变。
解决方案
我不认为 TypeScript 有任何内置的东西可以让你这样做。它需要一种反射形式,这反过来又需要 TypeScript 向t
它输出的 JavaScript 发出一个 ' 成员列表,而通常它不会这样做。我在 TypeScript 文档中没有找到任何关于反射的内容(这令人惊讶)。
作为一种解决方法,您可以列出数组中的成员。这是重复,但似乎是不可避免的重复:
type t = {
a1: boolean;
a2: number;
a3: string;
};
const t_members = ["a1", "a2", "a3"];
那么这是一个简单的循环:
const o2: t = {} as t;
for (const member of t_members) {
o2[member] = o1[member];
}
如果这是您经常做的事情,请为它创建一个实用函数。
推荐阅读
- c# - 如何将网络摄像头捕获的图像保存到项目文件夹/特定文件夹中
- string - 将字符串转换为插入次数最少的回文
- sql-server - 使用 in 语句的具有多个值的 SQL 搜索查询
- foreign-keys - 具有相同 ID 的表连接到另一个表
- php - WooCommerce 以编程方式修改购物车总数
- python-3.x - 为 Pybluez 安装 GATTlib?
- excel - 查找具有可变范围的缺失数字 for 循环
- dropbox - Dropbox 的连接数量有限。有什么办法可以解决吗?
- c++ - 为什么使用 NULL 指针调用类方法?
- javascript - 仅获取图像 URL 的替换字符失败