簡體   English   中英

從參數失敗推斷出的三元返回類型(Typescript)

[英]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。

Typescript 操場。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM