建構式的 Typescript 型別是什么?
這是我的意思的一個例子,它引發了這個警告:
TS2507: Type 'Function' is not a constructor function type.
我需要在clazz這里定義什么型別?
class A {
foo() {console.log("bar")};
}
console.log(typeof A);
// function
function Factory(clazz: Function) : any {
class B extends clazz {
// Type 'Function' is not a constructor function type.
}
return B;
}
class Foo extends Factory(A) {}
new Foo().foo();
如果我禁止 TS 警告,此代碼將執行并列印出預期的結果bar
uj5u.com熱心網友回復:
我們將使用構造簽名:
type Constructable = { new (...args: any[]): any; };
function Factory(clazz: Constructable): Constructable {
class B extends clazz {
}
return B;
}
但這作為回傳型別不是很好。理想情況下,它至少應該回傳傳入的類:
function Factory<T extends Constructable>(clazz: T): T {
class B extends clazz {
}
return B;
}
更進一步,我們還可以注釋回傳型別T & { ... }以匹配回傳的類。
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/454280.html
標籤:打字稿
下一篇:根據登錄者更改用戶影像
