あなたは、引数と結果は、2つの異なる種類の労働組合であることを指定することができます。型の指定方法については、https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compilerを参照してください。ここで
は、このような機能の簡単な例である:あなたのWebAssembly.instantiate
機能については
/**
* @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();
};
あなたはもちろん、文字列と数値よりも複雑なタイプがあります。私はあなたが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) {};
!
シンボルは、null以外のオブジェクトを示すために使用されます。これらがnullの場合は、そのままにしておいてください。 =
シンボルの後には、Object=
が定義されていないことを示します。
この機能の結果を使用する場合は、instanceof
などの方法を使用して、どのような種類のものをテストする必要があります。それ以外の場合、コンパイラは結果が2つの可能な型のうちの1つであることを認識します。 instanceof
を使用しない場合は、型キャストを使用して、そのタイプがわかっていることをコンパイラーに伝えることができます。上記のページの最後を参照してください。
引数とその結果の両方に共用体型を持つ関数の例は、goog.array.findです。 source for goog.array.findが利用可能です。角括弧<>
は、コンパイラのテンプレートタイプの機能に使用されています。