觀察這個打字稿代碼:功能的參數類型通用約束
class cli<T extends string> {}
let dist = function <T extends string>(m:T,c:cli<T>):void {
};
let a:cli<"foo"> = new cli();
dist("bar",a);
,我想該錯誤是,「酒吧」是不是「富」,但如果你真的檢查有沒有事實錯誤因爲dist推斷出類型變元"foo" | "bar"
。我試圖找出如何處理這個問題。
在我看來,有一種方法是使dist
函數的方法cli
,但在我的實際應用程序這樣做會是...不幸的。
感謝您的任何幫助。
我不知道這是否可以通過推斷來完成。 TypeScript中的類型系統是鴨式打字,它不像Java或C#那樣嚴格打字。由於'foo'和'bar'都是字符串,所以編譯器會擴展它以便它可以工作。 限制類型的一種方法是明確指定類型:'dist <'bar'>('bar',a)'。這會產生錯誤。但我想這不是你想要的。 – unional
那麼這樣做的麻煩在於它依賴於用戶使類型明確,所以它不會真正將它們從任何你知道的錯誤中拯救出來。 – Hunter