遵循此問題的解決方案:從泛型類中的型別引數創建一個新物件
我有這個簡單的代碼:
class TestBase {
hi() {
alert('Hi from base');
}
}
class TestSub extends TestBase {
hi() {
alert('Hi from sub');
}
}
class TestTwo<T extends TestBase = TestBase> {
constructor(private testType: new () => T) { // Set TestBase constructor as default value for testType ?
}
getNew() : T {
return new this.testType();
}
}
//var test = new TestTwo<TestBase>(TestBase);
var test = new TestTwo<TestSub>(TestSub);
var example = test.getNew();
example.hi();
// With a default value for testType, I will be able to write something like:
var test2 = new TestTwo();
test2.getNew().hi(); // Should print "Hi from base"
如何在 testTwo 建構式中為 testType 建構式設定默認值?
感謝幫助
uj5u.com熱心網友回復:
你不能,因為這是有效的代碼:
class TestSub3 extends TestBase { prop3: number = 42; }
class TestSub4 extends TestBase { prop4: string = "answer"; }
// ...
const test3 = new TestTwo<TestSub3>(); // Note no argument = uses default
const test4 = new TestTwo<TestSub4>(); // Note no argument = also uses default
您無法提供滿足該代碼的默認建構式,因為test3它必須提供創建 a的內容TestSub3,并且test4必須提供創建 a 的內容TestSub4。
您可能會考慮使用一個回傳類的函式,可能是一個多載的函式,以便TestBase如果您不提供任何引數,它可以回傳創建類的東西,但是當您提供某些型別時會擴展TestBase。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/436132.html
標籤:打字稿
上一篇:Javascript中從多個索引中解構專案的快捷方式
下一篇:如何將物件陣列轉換為一個物件
