'这'用作回调声明中的参数

时间:2018-04-13 09:57:46

标签: typescript typescript-typings

FileReader在lib.dom.d.ts中为onerror回调提供以下TypeScript签名

onerror: ((this: FileReader, ev: ProgressEvent) => any) | null;

有人可以指出为什么正确的用法省略了它:

const fileReader = new FileReader();
fileReader.onerror = (error: ProgressEvent) => reject(error); // rejecting a promise - snipped for brevity

我想更好地理解这一点。

2 个答案:

答案 0 :(得分:0)

Typescript在回调中支持this parametersthis parameters是假参数,它们首先出现在函数的参数列表中。传递this参数允许typescript知道this的显式类型。

有关详细信息,请参阅http://www.typescriptlang.org/docs/handbook/functions.html#this-parameters

答案 1 :(得分:0)

该声明表明该函数内部必须引用的this。在这种情况下,FileReader实例。

您不需要传递该值,因为它是推断的,因为您将该函数分配给FileReader对象的属性。它强制您仅将该函数称为FileReader的方法。

这样,必须始终安全地调用该函数,并在其中使用this是安全的:

function handleError(error) {
   console.log(this.readyState);
}

现在,如果您将此功能分配给onerror,则在调用onerror时,this将具有this的有效值。

但是这个功能是一个正常的功能,你可以这样做:

handleError(error);

这在JavaScript中会导致运行时错误(thisundefined)。

因此,仅使用该注释,TypeScript编译器将在此处进行抗议,强制您仅在FileReader实例的上下文中调用该函数。