3
function myFunc({ param1 }: {
param1: number;
}) {
// param1 is marked as mandatory in the definition, but we can bypass that
}
const mismatchedFunc: ({}) => void = myFunc;
mismatchedFunc({}); // No compile-time error
我猜測,對於這種現象的原因,從打字稿的結構型性質莖函數調用使用結構類型和變量重新分配到旁路類型檢查,在{ param1: number }
結構「適合「{}
。與「命名參數」
然而,這是不是不受歡迎的行爲(在這種情況下,或類的情況下),因爲它在很大程度上繞過了TypeScript提供的類型檢查?
這應該作爲一個錯誤提交嗎?
編輯1
由於@shusson指出,行爲(如V2.X)的預期(由於權衡),即使它是不可取的。
有關該問題根源的最相關討論,請參閱this GitHub issue和follow-up proposal以嘗試解決該問題。
所以雙變量函數參數是一種不受歡迎的行爲,但這是一種預期並且是權衡的結果。那是對的嗎? – pleasedesktop
是的,這是我的理解。 TypeScript有他們的文檔稱爲「不健全」的行爲,這是不可避免的,但仔細考慮。我認爲這些問題大部分都是由於TypeScript與JavaScript結合而引起的(在我看來這是一件好事)。 – shusson