簡體   English   中英

強制接受的 Class 類型沒有 arguments 構造函數

[英]Enforce that the accepted Class type has a no arguments constructor

給定一些帶有 Class 參數的 function(不是 object 或實例,而是 Class 本身),或者等效地分配給 Class 的變量。

問題是強制分配給參數的 Class 是一個沒有參數構造函數的 Class(只是,因為 JS 中的類可能最多有一個來自規范的構造函數,第8.3節( 8.3 ))。 這個用例是設計一個通用的 function,它可以構造(並返回)給定 class 的實例。

具體來說,為參數c添加所需的類型檢查:

function acceptsAClassParameter(c) {
    return new c();
}

class MyClassWithNoArgsConstructor { constructor() { ... } }
class MyClassWithArgsConstructor { constructor(foo) { ... } }

acceptsAClassParameter(MyClassWithNoArgsConstructor);
acceptsAClassParameter(MyClassWithArgsConstructor); // type error

Generics 的TypeScript 文檔提供了一個通過構造函數引用 class 類型的工廠示例:

function create<Type>(c: { new (): Type }): Type {
  return new c();
}

關鍵是要使用它,並避免使用強制構造函數不接受任何參數的簽名,例如: (...args: never[]) => any

對於給定的示例:

type NoArgsConstructor<T> = new () => T;
function createInstanceWithNoArgsConstructor<T>(c: NoArgsConstructor<T>) {
    return new c();
}

class MyClassWithNoArgsConstructor { constructor() { ... } }
class MyClassWithArgsConstructor { constructor(foo) { ... } }

createInstanceWithNoArgsConstructor(MyClassWithNoArgsConstructor);
createInstanceWithNoArgsConstructor(MyClassWithArgsConstructor); // Error: Types of construct signatures are incompatible.

TypeScript 游樂場鏈接

暫無
暫無

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

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