簡體   English   中英

如何在 typescript 中實現過載

[英]how to achieve overload in typescript

我知道 typescript 中有這樣的方法:

function foo(arg: number): string;
function foo(arg: string): number;
function foo(): any {
  if (typeof arguments[0] === "string") {
    return +arguments[0];
  } else {
    return arguments[0].toString();
  }
}

foo(1)       // '1'
foo("hello") // NaN 
foo("2")     // 2

但是當我有相同數量的參數並且每個參數都是自定義類型時,就像這樣


interface Dog {
  run: number;
}

interface Bird {
  fly: number;
}

function foo(arg: Dog): number;
function foo(arg: Bird): number;
function foo(): any {
}


我如何分辨這些參數之間的區別

TypeScript 是 JavaScript,所以你基本上必須做同樣的事情。 為了讓你的編譯器滿意,你可以實現類型保護。

https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards

function isDog(pet: Dog | Bird): pet is Dog {
  return 'run' in pet
}

您可以在代碼中使用這些來告訴 TypeScript 您已經驗證了運行時的類型。

function foo(arg?: Dog | Bird): void | number {
  if(arg) {
    if(isDog(arg)) {
      return arg.run;
    } else {
      return arg.fly;
    }
  }
}

暫無
暫無

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

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