我正在使用 typescript 4.8,我的型別有一個我真的不明白的錯誤。
function normalize<T = (InputData | Omit<InputData, "output">)>(
company: T
): any {
console.log(company.input.numberOfWorker);
}
這將顯示:Property 'input' does not exist on type 'T'.,但 InputData 上確實存在輸入。
但問題是,如果我這樣做,它會起作用:
function normalize(
company: InputData | Omit<InputData, "output">
):any {
console.log(company.input.numberOfWorker);
}
對我來說,同樣的事情不是嗎?因為 T 意味著等于 InputData 或省略
非常感謝如果你能解釋我
uj5u.com熱心網友回復:
問題
<T = (InputData | Omit<InputData, "output">)>
這僅將默認型別分配給T. 但是,此函式的使用者可以將任何型別(其形狀可能與該型別不同,InputData因此不具有該input屬性)傳遞給型別引數。例如:
normalize<string>("");
打字稿游樂場
解決方案
您想將約束添加到T. 這是使用extends關鍵字完成的,如下所示:
<T extends (InputData | Omit<InputData, "output">)>
打字稿游樂場
進一步閱讀
- 關于通用約束的 TypeScript 檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/526820.html
