簡體   English   中英

Typescript 強制 object 解構

[英]Typescript enforce object destructuring

我正在嘗試編寫一個 class ,它使用其泛型類型作為 object 進行解構以僅強制使用這些字段。

是否可以使用 typescript 來指示必須解構 object 並使用其字段?

class A<T> {
  doSomething ( { destructured object }: T) {
    // work with destructured T...
  }
}

例如,像 object 這樣的 id 具有要插入數據庫的接口:

interface AnInterface { a: number; b: string; }

所以我創建了這個通用的 class

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,而是在創建這些泛型類時,需要指定一個字符串數組,這些字符串表示從 object 中提取的用於操作的字段。 IE:

const createFields = ['a', 'b']; 

你當然可以這樣做,但這里的T是什么,T 只是一個沒有任何屬性的類型,所以你將在這里解構什么。 您可以將T定義為某種類型的變體並使用 object 解構,

這是一個簡單的例子,

interface SomeProps {
  name: string;
}

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

順便說一句,如果您嘗試從問題中解構您的T ,它確實有效。 它只是空的 object,我在這里看不到任何用例。

所以,這也是完全有效的語法,

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

  }
}

我認為不可能做到這一點。 必須為每種情況明確定義類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM