带有 thisArg 的 Typescript 和 Array.map 导致错误
Typescript and Array.map with thisArg results in an error
在 Javascript 中,我可以将 thisArg
作为第二个参数传递给 Array.map
函数。这是一个最小的例子。
const a = [1,2,3,4,5,6];
a.map(function(e) { this.sum += e; return this.sum; }, {sum: 0});
结果是数组[1, 3, 6, 10, 15, 21]
。当我在 Typescript 中尝试相同的操作时,出现以下错误。
'this' implicitly has type 'any' because it does not have a type annotation. ts(2683)
我如何注释代码以便 this
回调中的类型正确?
我试过像这样给所有东西一个类型注释,
const a: number[] = [1,2,3,4,5,6];
const S: {sum: number} = {sum: 0};
a.map(function(e: number): number { this.sum += e; return this.sum; }, S);
但这并没有消除错误,因为这些注释中的 none 明确指定了 this
的类型。
您可以使用您的类型覆盖映射函数的 this
参数:
a.map(function(this: {sum: number}, e: number): number { this.sum += e; return this.sum; }, S);
见https://www.typescriptlang.org/docs/handbook/2/functions.html#declaring-this-in-a-function
PS:在 .
上有人提出了非常相似的问题
在 Javascript 中,我可以将 thisArg
作为第二个参数传递给 Array.map
函数。这是一个最小的例子。
const a = [1,2,3,4,5,6];
a.map(function(e) { this.sum += e; return this.sum; }, {sum: 0});
结果是数组[1, 3, 6, 10, 15, 21]
。当我在 Typescript 中尝试相同的操作时,出现以下错误。
'this' implicitly has type 'any' because it does not have a type annotation. ts(2683)
我如何注释代码以便 this
回调中的类型正确?
我试过像这样给所有东西一个类型注释,
const a: number[] = [1,2,3,4,5,6];
const S: {sum: number} = {sum: 0};
a.map(function(e: number): number { this.sum += e; return this.sum; }, S);
但这并没有消除错误,因为这些注释中的 none 明确指定了 this
的类型。
您可以使用您的类型覆盖映射函数的 this
参数:
a.map(function(this: {sum: number}, e: number): number { this.sum += e; return this.sum; }, S);
见https://www.typescriptlang.org/docs/handbook/2/functions.html#declaring-this-in-a-function
PS:在