首页 > 解决方案 > 打字稿强制对象解构

问题描述

我正在尝试编写一个使用其泛型类型作为要解构的对象的类,以仅强制使用那些字段。

是否可以使用打字稿来指示必须解构对象并使用其字段?

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']; 

标签: javascriptnode.jstypescript

解决方案


你当然可以这样做,但是T这里有什么,T 只是一个没有任何属性的类型,所以你将在这里解构什么。您可以定义T为某种类型的变体并使用对象解构,

这是一个简单的例子,

interface SomeProps {
  name: string;
}

class A<T extends SomeProps> {
  doSomething({ name }: T) {
    console.log(name);
  }
}

顺便说一句,如果您尝试从问题中解构您T的问题,它确实有效。它只是一个空对象,我在这里看不到任何用例。

所以,这也是完全有效的语法,

class A<T> {
  doSomething({}: T) {

  }
}

推荐阅读