javascript가 생성자의 속성을 올바르게 인식하도록 Google 클로저 컴파일러를 얻는 방법을 이해할 수 없습니다. 예를 들어, 아래 코드에서 컴파일러가 다음과 같은 오류를 생성하지 않도록 27 행에서 'cls'유형을 알 수 없습니다.클로저 컴파일러에서 javascript의 생성자 속성을 올바르게 확인하는 방법
foo.js : 29 : 경고 - cls에 정의 된 적이없는 속성 cls.say(); ^
설명서를 읽으면 25시에해야하는 것처럼 보입니다. 누군가 도와 줄 수 있습니까? 감사,
1 /**
2 * @interface
3 **/
4 function Sayer() {}
5 Sayer.prototype.say = function() {};
6 Sayer.say = function() {};
7
8 /**
9 * @constructor
10 * @implements {Sayer}
11 **/
12 function A() {}
13 A.say = function() { console.log('A factory'); };
14 A.prototype.say = function() { console.log('Am an A'); }
15
16 /**
17 * @constructor
18 * @implements {Sayer}
19 **/
20 function B() {}
21 B.say = function() { console.log('B factory'); };
22 B.prototype.say = function() { console.log('Am an B'); };
23
24 /**
25 * @param {function(new:Sayer)} cls
26 **/
27 function makeSayer(cls) {
28 var obj = new cls();
29 cls.say();
30 obj.say();
31 }
32
33 makeSayer(A);
34 makeSayer(B);
호기심에서 'new : B' 또는'new : A'로 변경하면 어떻게됩니까? 나는 그것이 인터페이스를 잘 다루지 않는지 궁금하다. 또는 인터페이스에 정적 메서드가 허용되지 않는 경우? –
차이가 없습니다. 나는 Sayer에게 A와 B의 수퍼 클래스를 만들었고 구현 도구를 확장 등으로 변경했습니다. 여전히 불평합니다. – seth