外部规则中的多个函数签名
Multiple function signatures in externs rule
我正在为 WebAssembly 编写外部闭包。
对于函数 WebAssembly.instantiate
,它有 2 个函数签名。
Promise<{module:WebAssembly.Module, instance:WebAssembly.Instance}>
instantiate(BufferSource bytes [, importObject])
Promise<WebAssembly.Instance> instantiate(moduleObject [, importObject])
如何在闭包外部声明两个规则?
参考:
https://github.com/WebAssembly/design/blob/master/JS.md#webassemblyinstantiate
您可以指定参数和结果是两种不同类型的并集。请参阅 https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler 了解如何指定类型。
下面是此类函数的一个简单示例:
/**
* @param {string|number} value
* @return {string|number}
*/
ambiguous = function(value) {
if (typeof value == 'string') {
return value+' is string';
} else if (typeof value == 'number') {
return value+1;
} else throw new Error();
};
对于您的 WebAssembly.instantiate
函数,您当然会有比字符串和数字更复杂的类型。我不知道您将如何指定 Promise 类型,我不认识为这些类型显示的语法,而且我怀疑闭包编译器是否会按原样解析它。然后 extern 看起来像这样(Promises 有伪造的类型)。
/**
@param (!BufferSource|!WebAssembly.Module) arg1 either a BufferSource or a module
@param Object= importObject optional object to import
@return (!PromiseType1|!PromiseType2)
*/
WebAssembly.instantiate = function(arg1, importObject) {};
!
符号用于表示非空对象。如果这些可以为空,则将其保留。 Object=
后面的=
符号表示可以不定义。
使用此函数的结果时,您需要使用 instanceof
或其他方法测试您得到的是什么类型的东西。否则编译器只知道结果是两种可能类型之一。如果不使用 instanceof
,您可以使用 类型转换 来告诉编译器您知道类型是什么,请参阅上面引用的该页面的末尾。
闭包库中的函数示例在其参数和结果中均具有联合类型 goog.array.find. The source for goog.array.find 可用。请注意,尖括号 <>
用于编译器的模板类型功能。
我正在为 WebAssembly 编写外部闭包。
对于函数 WebAssembly.instantiate
,它有 2 个函数签名。
Promise<{module:WebAssembly.Module, instance:WebAssembly.Instance}> instantiate(BufferSource bytes [, importObject])
Promise<WebAssembly.Instance> instantiate(moduleObject [, importObject])
如何在闭包外部声明两个规则?
参考:
https://github.com/WebAssembly/design/blob/master/JS.md#webassemblyinstantiate
您可以指定参数和结果是两种不同类型的并集。请参阅 https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler 了解如何指定类型。
下面是此类函数的一个简单示例:
/**
* @param {string|number} value
* @return {string|number}
*/
ambiguous = function(value) {
if (typeof value == 'string') {
return value+' is string';
} else if (typeof value == 'number') {
return value+1;
} else throw new Error();
};
对于您的 WebAssembly.instantiate
函数,您当然会有比字符串和数字更复杂的类型。我不知道您将如何指定 Promise 类型,我不认识为这些类型显示的语法,而且我怀疑闭包编译器是否会按原样解析它。然后 extern 看起来像这样(Promises 有伪造的类型)。
/**
@param (!BufferSource|!WebAssembly.Module) arg1 either a BufferSource or a module
@param Object= importObject optional object to import
@return (!PromiseType1|!PromiseType2)
*/
WebAssembly.instantiate = function(arg1, importObject) {};
!
符号用于表示非空对象。如果这些可以为空,则将其保留。 Object=
后面的=
符号表示可以不定义。
使用此函数的结果时,您需要使用 instanceof
或其他方法测试您得到的是什么类型的东西。否则编译器只知道结果是两种可能类型之一。如果不使用 instanceof
,您可以使用 类型转换 来告诉编译器您知道类型是什么,请参阅上面引用的该页面的末尾。
闭包库中的函数示例在其参数和结果中均具有联合类型 goog.array.find. The source for goog.array.find 可用。请注意,尖括号 <>
用于编译器的模板类型功能。