來自 C#。我們如何在 Typescript 中回傳泛型引數的默認值?例如,這是 C# 中一個完全沒用的函式:
private T TwiceAsMuch<T>(T number)
{
if (number is int n)
return (T)(object)(n * 2);
else if (number is float f)
return (T)(object)(f * 2);
else
return default;
}
如何return default在 Typescript 中實作最后一行?
語境
我正在撰寫一個小包裝函式,它axios.post以呼叫者指定的型別執行并回傳回應:
private static async postInternal<T>(route: string, data: unknown): Promise<T> {
await Vue.$axios.get('/sanctum/csrf-cookie')
const res = await Vue.$axios.post<T>(`${route}`, data)
.then(res => res.data)
.catch(err => {
openErr(err)
return ???
})
}
用什么代替????
uj5u.com熱心網友回復:
很抱歉,沒有等價物。一個值有一個型別,但一個型別可能永遠不會有一個值,默認值或其他值。
我對C#一無所知,但根據這個答案 return default是這樣的:
default關鍵字將回傳null參考型別和數值型別為零。
Typescript 中不存在這種模式。與 C# 不同,Typescript 轉換為 javascript。并且 javascript 沒有靜態型別。這意味著在運行時,您無法知道T. 它完全從執行代碼中消失了。
這個打字稿:
postInternal<number>('/path', { data: true })
還有這個打字稿:
postInternal<{ a: { b: { c: number } } }>('/path', { data: true })
兩者都編譯為此 javascript:
postInternal('/path', { data: true })
這意味著在運行時T 無法知道的型別。因此,您不能T僅根據型別來分支代碼路徑。
通常,您處理這種情況的方式是允許結果為空,然后null在錯誤情況下回傳:
private static async postInternal<T>(route: string, data: unknown): Promise<T | null> {
//...
}
const num = postInternal<number>('/path', { data: true }) ?? 0
或者通過簡單地拋出錯誤并讓呼叫者捕獲它并從那里處理要做什么。
try {
const num = postInternal<number>('/path', { data: true })
} catch (error) {
console.error('exploded :(', error)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/409679.html
標籤:
下一篇:型別'IntrinsicAttributes&{name:string;上不存在屬性'item'href:字串;}'
