使用以下設定:
class Base {
doSomething(value: unknown): void {}
}
class Child extends Base {
override doSomething(): void {}
}
…我預計會出現編譯器錯誤,與由于違反LSP導致的value: unknowninChild的多載引數丟失有關,但沒有這樣的錯誤(如操場上所見)。doSomething
有沒有辦法強制執行Child.doSomething(),以在延長 Base.doSomething(),而不是完全覆寫呢?
uj5u.com熱心網友回復:
一個稍微簡化的例子:
let base = (value: unknown) => { }
let child = () => { }
base = child
base(42) // ok
分配child給基是安全的。base使用引數呼叫base(42)不應提供任何不安全的行為或錯誤,因為它實際上呼叫child不期望任何引數。
另一方面,分配child給base是不安全的:
let base = (value: unknown) => {
console.log(value)
}
let child = () => { }
child = base // error
child()
TS 禁止您分配給base,child因為base需要一些引數并且child不帶引數呼叫可能會導致運行時錯誤。
您可以在檔案中找到有關函式可分配性的更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/403093.html
標籤:
