javascript - 打字稿强制对象解构
问题描述
我正在尝试编写一个使用其泛型类型作为要解构的对象的类,以仅强制使用那些字段。
是否可以使用打字稿来指示必须解构对象并使用其字段?
class A<T> {
doSomething ( { destructured object }: T) {
// work with destructured T...
}
}
例如,id 像一个要插入数据库的具有此接口的对象:
interface AnInterface { a: number; b: string; }
所以我创建了这个通用类
Class CRUDLService<T> {
create( { destructured object }: T ) {
// Insert object with the fields of T only, not any other
}
}
所以我可以创建一个通用服务,例如:
const anInterfaceService = new CRUDLService<AnInterface>();
这样我可以尝试确保每当调用 anInterfaceService.create 时,只使用正确的字段。
我现在这样做的方式没有利用 typescript,而是在创建这些泛型类时,需要指定一个字符串数组,这些字符串表示从对象中提取的用于操作的字段。IE:
const createFields = ['a', 'b'];
解决方案
你当然可以这样做,但是T
这里有什么,T 只是一个没有任何属性的类型,所以你将在这里解构什么。您可以定义T
为某种类型的变体并使用对象解构,
这是一个简单的例子,
interface SomeProps {
name: string;
}
class A<T extends SomeProps> {
doSomething({ name }: T) {
console.log(name);
}
}
顺便说一句,如果您尝试从问题中解构您T
的问题,它确实有效。它只是一个空对象,我在这里看不到任何用例。
所以,这也是完全有效的语法,
class A<T> {
doSomething({}: T) {
}
}
推荐阅读
- apache-spark - 基于相同 ID 合并 pyspark 数据帧行
- excel - 是否有用于检查另一个 Excel 文件是否正在主动保存的 Excel VBA 功能?
- r - R 用空格分隔邮政编码和位置名称
- gremlin - 基于另一个顶点属性更新
- node.js - 如何保存图像以在“fs.createReadStream”中使用?
- kubernetes - 在 kubernetes 上的 traefik 中忽略了后端服务端口
- python - 如何在 Python 中获取 UTC 时间戳
- android - 如何在 Android 中通过 Intent 打开 Pdf 查看器
- python - 如何合并两个数据框,然后将结果与不同的数据框相乘?
- groovy - 如何执行闭包作为 Groovy 映射的值?