簡體   English   中英

函數休息參數和泛型

[英]function rest parameter and generic

我的迭代中有以下錯誤

運算符 '+=' 不能應用於類型 'number' 和 'T'。

我不知道為什么

let a: number = 1, b: number = 2, c: number = 3, d: number = 4;
function somme<T>(...nombres: T[]): T {
  let s: number = 0;

  for (let nombre of nombres) {
    s += nombre;
  }
  return s;
}

console.log(a + `  + ` + b + ` = ` + somme<number>(a, b));
// 1 + 2 = 3
console.log(a + `  + ` + b + `  + ` + c + `  = ` + somme<number>(a, b, c));
// 1 + 2 + 3 = 6
console.log(a + `  + ` + b + `  + ` + c + `  + ` + d + `  = ` + somme<number>(a, b, c, d));
// 1 + 2 + 3 + 4 = 10

謝謝你的幫助

你有一個錯誤,因為+運算符被限制用於兩個主要類型stringnumber ,你只能將它用於這兩個或子類型,如1abc 在您的情況下,它可見您只想使用number類型(您有這種類型的 local s ),我建議刪除泛型類型,因為此函數始終適用於數字:

function somme(...nombres: number[]): number {
  let s: number = 0;

  for (let nombre of nombres) {
    s += nombre;
  }
  return s;
}

最終你可以保持通用(仍然看不到任何理由),但不是為了回報,因為回報是一個總和,而不是你作為參數得到的相同數字:

function somme<T extends number>(...nombres: T[]): number {
  let s: number = 0;

  for (let nombre of nombres) {
    s += nombre;
  }
  return s;
}

你不能有返回類型T因為這意味着如果你說T = 1那么 return 將是1 ,實際上將是給定參數數組中所有1值的總和,所以總和將是T * arr['length']並且這種類型在 TS 中是不可能的,因為沒有像類型算術運算這樣的東西。

暫無
暫無

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

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