作成時にタイプが使用できないため、タイプが見つからMyType
ない可能性がありますinstance
(new MyType()またはインスタンスinstanceof MyTypeを実行できません)。
これは、インスタンスと同じスコープに typedef を追加するか、MyType と同じスコープにインスタンスを作成することで修正できます。
両方:
/** @typedef {Object} */
var MyType;
/** @return {MyType} Returns new MyType **/
function func(){
/** @constructor */
function MyType(){
}
return new MyType();
}
/** @type {MyType} */
var instance = func();
と:
function func(){
/** @constructor */
function MyType(){
}
/** @type {MyType} */
var instance = new MyType();
return new MyType();
}
警告を生成しません
[アップデート]
注釈を介して複雑な型を提供するのは非常に困難です。必要に応じて型を複雑にすることができます。externs 変数とその関数は短い名前に変更されず (追加のコンパイル パラメーターがなければ)、型を再定義できないため、externs の使用は機能しません。したがって、基本的に typedef アノテーションを提供することに固執していると思います。
/** @typedef {{hands:number,doSomething:function(string):boolean}} */
var MyType;
/** @return {MyType} Returns new MyType **/
function func(){
/** @constructor */
function MyType(){
this.hands=22;
}
MyType.prototype.doSomething=function(msg){
return true;
}
return new MyType();
}
/** @type {MyType} */
var instance = func();
/** @type string */
var myString=instance.hands;//warning:found number required string
/** @type Array */
var myArray=instance.doSomething("hi");//found boolean required Array
instance.doSomething(22);//found number required string
instance.doSomething();//at leas 1 argument(s)