[英]Ternary return type inferred from parameter failure (Typescript)
經過很長時間閱讀問題並查看文檔后,我仍然需要幫助。 我的問題很簡單。 我想定義一個 function 當一個數組作為參數給出時返回一個數組,但是 Typescript 從來沒有讓我返回想要的值。
我簡化了我想在此處編碼的 function,因為錯誤仍然相同。
function notWorkingTernary(val: number | number[]) : typeof val extends number[] ? string[] : string{
if(Array.isArray(val)){
return val.map(v=>String(v));
}
else{
return String(val);
}
}
此 function 在第一次返回時出現以下錯誤(第 3 行): Type 'string[]' is not assignable to type 'string'.ts(2322)
我不明白為什么 Typescript 會希望我返回一個字符串類型,即使 val 的類型在這里顯然是一個數字數組。
如果我避免給出返回類型,則返回類型始終為 string | string[] 並且每次使用 function 時,我都必須自己轉換返回類型。
我在這里做錯了什么?
您想使用function 簽名重載。 在您的情況下,它應該如下所示:
function notWorkingTernary(val: number): string;
function notWorkingTernary(val: number[]): string[];
function notWorkingTernary(val: number | number[]): (string | string[]) {
if(Array.isArray(val)){
return val.map(v=>String(v));
}
else{
return String(val);
}
}
基本上,您有一個 function 和幾個“類型重載”,這些“類型重載”在運行時處理,並通過聲明運行時與類型兼容的類型 promise。
function notWorkingTernary<T extends number | number[]>(val: T): T extends number[] ? string[] : string{
if(Array.isArray(val)){
return val.map(v=>String(v)) as T extends number[] ? string[] : string;
}
else{
return String(val) as T extends number[] ? string[] : string;
}
}
也許有人知道擺脫as T extends number[]? string[]: string
as T extends number[]? string[]: string
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.