instance
(새 MyType() 또는 instance instanceof MyType을 수행 할 수 없음)을 만들 때 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 {{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)
출처
2013-06-07 00:56:47
HMR
안녕하세요. HMR이 왜 그런 유형을 찾을 수 없는지에 대한 올바른 이유라고 생각합니다. 첫 번째 솔루션은 내가 뭘했는지에 가깝지만 함수에서 Object의 인스턴스 인 모든 유형을 허용하며 인스턴스의 MyType 만 받아들이는 방법을 찾기를 희망했습니다. (IE.''function func() {return {};}'은 에러없이 컴파일하지만, 타입 검사 에러가 있기를 원합니다) – Paulpro
그 바깥 쪽 범위에서 런타임시에'instance instanceof myType은 해당 범위에 없기 때문에 MyType입니다. 하지만 컴파일 시간에 정렬 될 수 있기를 바랬습니다. – Paulpro
@ Paululpro 제 생각에 JS가 타입을 찾지 못하면 컴파일러는 타입을 찾을 수 없지만 컴파일러가 어떻게 그것을하는지는 모르겠습니다. 내 대답을 업데이 트하고 그것을 정의하는'type' 주석을 사용하여 붙어 있다고 생각합니다. 원하는만큼 복잡 할 수는 있지만 여러 줄로 확산시킬 수 있다면 좋을 것입니다. 그렇게 할 방법을 찾지 못했습니다. – HMR