我有一個介面,我想要一個回傳實作類實體的方法,我當前的實作是這樣的:
interface SuperClass<T extends SuperClass<any>> {
returnSelf(): T;
}
class SubClass implements SuperClass<SubClass> {
public returnSelf(): SubClass {
return this;
}
}
const subclass: SubClass = new SubClass().returnSelf();
但是,這使用了any我知道應該不惜一切代價避免的型別。我的問題是,這種型別安全嗎?我想不出任何情況下它不會,但我寧愿使用更安全的unknown型別,但它不能編譯。為什么?有沒有更慣用的方法來做到這一點?
uj5u.com熱心網友回復:
您可以將其this用作型別。
https://www.typescriptlang.org/docs/handbook/advanced-types.html#polymorphic-this-types
interface SuperClass {
returnSelf(): this;
}
class SubClass implements SuperClass {
public returnSelf(): this {
return this;
}
}
const subclass: SubClass = new SubClass().returnSelf();
uj5u.com熱心網友回復:
我不確定這是否是您想要的,但您可以使用遞回約束:
// recursive
interface SuperClass<T extends SuperClass<T>> {
returnSelf(): T;
}
class SubClass implements SuperClass<SubClass> {
public returnSelf(): SubClass {
return this;
}
}
const subclass = new SubClass().returnSelf()
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/350688.html
標籤:打字稿
上一篇:在Angular10上從node-sass切換到sass(dart-sass)時出錯
下一篇:動態道具取決于其他道具
