2012-10-02 2 views
2

내가 '확장'Resig 씨의를 사용하는 기존 코드를 참조하기 위해 노력하고있어 확장 Resig 씨 참조,하지만 난 오류타이프 : 이제

의 무리를 얻고있다 ------ test.ts ----- ---

/// <reference path="myclass.js" /> 
var m = new MyClass (3); 

------ myclass.js --------

/// <reference path="class.js" /> 

var MyClass = Class.extend({ 

    init: function (i) 
    { 
     this.i = i; 
    }, 
}) 

------ class.js ------- -

(copied from http://ejohn.org/blog/simple-javascript-inheritance/) 

오류 :

Supplied parameters do not match any signature of call target 
The name 'Class' does not exist in the current scope 
The property 'extend' does not exist on value of type '() => void' 
The name 'Class' does not exist in the current scope 

나는 결국 내가 타이프로 확장 기반 코드를 다시 작성 싶어 실현,하지만 그때까지 어떻게 내가 새로운 코드에서 참조 할 수 있습니까?

이 질문은 깊은 질문을 던집니다. 왜 기존 자바 스크립트 코드의 유형 오류에 대해 불평합니까?

답변

3

일반적으로 TypeScript는 외부 JavaScript 코드에서 유형을 추론 할 수 없습니다.

당신은 당신이 이렇게 타이프이 유형의 형태가 무엇인지 알고로 호출하고있는 '확장'코드의 형태로 선언해야합니다 :

declare class Class { 
    static extend(body: any); 
} 

당신은 소스에 그것을 넣을 수 있습니다 중 하나를 파일 (하나의 파일 프로젝트 만있는 경우) 또는보다 적절하게 소스 파일에서 참조하는 '.d.ts'파일에 저장하십시오.

+0

혼란스러워합니다. 내 .ts 파일에 Spongman

+0

여전히 함수와 변수 같은 것들에 대해서는 유추 된 타입을 볼 수 있습니다. 따라서 .ds 파일을 쓰지 않아도되는 .js를 참조하는 유스 케이스가 있습니다. –

+0

맞지만 요점은 다음과 같은 오류를 추론하는 것은 유용하지 않습니다. 현재 추측 할 수없는 것은 일반적인 코드를 참조하는 것이 불가능하다는 것을 의미합니다. – Spongman