運行此打字稿代碼后,它在回呼函式的專案引數上給我一個錯誤。找不到問題所在
function tap<T>(array:T[],callback:(array:T[])=> T ):T{
return callback(array)
}
const myResult = tap<number>([1,2,3,4],(item)=>{
if(item.length !==0 ){
return item.pop()
}else{
return 1
}
})
錯誤輸出
Argument of type '(item: number[]) => (() => number | undefined) | 10' is not assignable to parameter of type '(array: number[]) => number'.
Type '(() => number | undefined) | 10' is not assignable to type 'number'.
Type '() => number | undefined' is not assignable to type 'number'.ts(2345)
uj5u.com熱心網友回復:
item.pop()可能回傳未定義。您可以將回呼函式修改為
const myResult = tap<number>([1,2,3,4], (item) => {
return item.pop() ?? 1;
})
如果陣列為空并pop()回傳undefined,回呼函式將回傳 1。
uj5u.com熱心網友回復:
它抱怨該專案可能未定義。只需將 tap 更改為 tap<number | 未定義>
function tap<T>(array: T[], callback: (array: T[]) => T): T {
return callback(array);
}
const myResult = tap<number | undefined>([1, 2, 3, 4], (item) => {
if (item.length !== 0) {
return item.pop();
} else {
return 1;
}
});
uj5u.com熱心網友回復:
我猜你的錯誤在這里
return item.pop()
item.pop() 可能會回傳“undefined”。這就是為什么你要回傳 'number | 不明確的'。
我相信它可以像這樣作業
function tap<T>(array:T[],callback:(array:T[])=> T ):T{
return callback(array)
}
const myResult = tap<number>([1,2,3,4],(item)=>{
if(item.length !==0 ){
return item.pop()!
}
return 1
})
我只是添加了'!' 在 pop() 的末尾 :-)
這告訴打字稿它可以安全地信任您的代碼,并且您確實永遠不會回傳未定義的值。由于您有條件檢查代碼的行為,因此您可以安全地添加“!”。
不過,我不建議在沒有檢查的情況下添加它。
干杯!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/535825.html
上一篇:重新執行函式
