簡體   English   中英

使用返回多種類型的函數

[英]Working with functions that return multiple types

我很難使用返回多種類型的函數:

這是一個例子

function returnM(x: Number): Number | { a: Number; b: Number } | undefined {
  if (x < 10) {
    return undefined;
  } else {
    return x;
  }
}
let result: any = returnM(3);

switch (result) {
  case undefined: {
    // do NNN
    break;
  }
  // case Number do XXX
  // case Object {a: Number, b: Number } do YYY
}

console.log(result);

我試圖找到一種優雅的方式來檢查返回的特定類型,然后采取相應的行動。

甚至必須設置“結果:任何”都感覺有點像黑客。

處理這個問題的最佳方法是什么?

您應該使用number而不是Number

function returnM(x: number): number | { a: number; b: number } | undefined {
  if (x < 10) {
    return undefined;
  } else {
    return x;
  }
}

let result = returnM(3);

switch (typeof result) {
  case "undefined": {
    result // type: undefined
    break;
  }
  case "number": {
    result // type: number
    break;
  }
  case "object": {
    result // type: { a: number; b: number }
    break;
  }
}

如果您的返回類型看起來與您的演示代碼完全一樣,那么switch(typeof result)是可能的:

function returnM(x: Number): Number | { a: Number; b: Number } | undefined {
  if (x < 10) {
    return undefined;
  } else if(x < 20) {
    return {"a":10,"b":Number(x)-10};
  } else {
    return x;
  }
}
let result: any = returnM(Math.random()*40);

switch (typeof result) {
  case "undefined":
    console.log("undefined is returned");
    break;
  case "number":
    console.log("A number is returned");
    break;
  case "object":
    console.log("An object is returned");
}

console.log(result);

網上游樂場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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