簡體   English   中英

如何在箭頭函數中使用 Typescript 泛型添加兩個參數

[英]How to add two arguments using Typescript Generics in Arrow Function

例如,我在.tsx file擴展名中有此代碼

const Add = <T,>(arg0: T, arg1: T): T => arg0 + arg1;
const A = Add(1, 2);
const B = Add('1', '2')

我的問題是有一個錯誤說:

Operator '+' cannot be applied to types 'T' and 'T'.ts(2365)

是否有關於如何在帶有泛型的Arrow 函數中使用它的解決方法?

好吧,首先你想把你的泛型限制在你真正打算用+操作符使用的東西上; 大概是stringnumber 然后,這仍然會失敗,因為編譯器會拒絕添加string | number string | number 更糟糕的是,限制泛型參數以擴展string | number string | number將導致編譯器將輸入解釋為字符串文字數字文字類型,並且您不希望Add(1, 2)的返回類型為1 | 2 1 | 2 .

最簡單的解決方法是對返回值使用類型斷言條件類型,這會將結果擴展為stringnumberstring | number string | number :

const Add = <T extends string | number>(
    arg0: T, arg1: T
): T extends string ? string : number => arg0 as any + arg1;

const A = Add(1, 2); // number
const B = Add('1', '2') // string
Add(1, "2"); // compile error
Add("1", 2); // compile error
const C = Add(Math.random() < 0.5 ? 1 : "1", Math.random() < 0.5 ? 2 : "2"); // string | number

好的,希望有幫助; 祝你好運!

Playground 鏈接到代碼

interface IAdd {
  (a: number, b: number): number
  (a: string, b: string): string
}
const Add: IAdd = (a: any, b: any) => a + b;
Add(1, 1);
Add("1", "2");

暫無
暫無

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

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