簡體   English   中英

混入中的打字稿棘手的語法

[英]typescript tricky grammar in mixins

type Constructor<T> = new (...args: any[]) => T;

function f1<T extends {}>(naked: Constructor<T>): any {
    return class dressed extends naked { } // error
}

function f2<T extends Constructor<{}>>(naked: T): any {
    return class dressed extends naked { } // ok
}

f1表示'dressed' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint '{}'.

我不認為f1有任何語義錯誤,但為什么會出現語法錯誤?

令人困惑的是Constructor<T>類型,因為實際上我們永遠無法在類 mixin 語法中指定其泛型參數T

有了更簡單/非通用的定義,我們自然可以選擇編寫一個類 mixin,如f2

type Constructor = new (...args: any[]) => any;

function Dressed<T extends Constructor>(Base: T) { // Note: no `: any` return type so that the type inference works.
  return class extends Base {}
}

如果我們在其他地方需要一個通用的Constructor類型,我們仍然可以指定一個默認類型來繼續編寫<T extends Constructor> ,這會引起誤解:

type Constructor<T = {}> = new (...args: any[]) => T;

暫無
暫無

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

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