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
我想更好地理解这一点。
答案 0 :(得分:0)
Typescript在回调中支持this parameters
。 this 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中会导致运行时错误(this
为undefined
)。
因此,仅使用该注释,TypeScript编译器将在此处进行抗议,强制您仅在FileReader
实例的上下文中调用该函数。