[typescript] JavaScript 파일을 TypeScript로 변환하는 도구가 있습니까?

이제 TypeScript가 나왔습니다. 흥미로운 소식이지만 기존의 모든 JavaScript 파일을 TypeScript로 변환하는 방법은 무엇입니까?



답변

이것이 매우 문제가 될까봐 걱정됩니다. TypeScript는 JavaScript의 상위 집합입니다 . 이는 유효한 모든 JavaScript 코드가 유효한 TypeScript 코드이기도 함을 의미합니다. 그건 그냥 잘못이야 다음 코드는 JavaScript에서는 정확하지만 TypeScript에서 오류를 생성합니다.

var data={x:5, y:6};
data.z=5;

데이터를 “ambient”로 선언하면 JavaScript의 동적 동작을 얻을 수 있습니다

var data:any={x:5, y:6};
data.z=5;

이제 이것은 TypeScript에서도 작동합니다. 그럼에도 불구하고 .js 파일의 확장자를 .ts로 변경하고이 파일을 TypeScript 컴파일러에 전달할 수 있습니다. 이것은 정말로 혼란 스러웠으며 freenode의 TypeScript IRC 채널에서 질문을했습니다. Typescript 컴파일러는 입력에 유효한 JavaScript가 있는지 확인하고 무언가를 발견하면 아무것도하지 않는 것으로 나타났습니다. 직관적으로 이것은 좋은 소리입니다. 파일 확장자 만 업데이트하면 모든 JavaScript를 Typescript로 “변환”할 수 있어야합니다. 불행히도 이것은 예상대로 작동하지 않습니다. 이 코드가 있다고 가정 해 봅시다.

var func=function(n){alert(n)};

var data={x:5};
data.z=6;

편집 : 방금 이것을 컴파일하려고했지만 작동하지 않습니다. 죄송합니다. 착각 한 것 같습니다. TypeScript 컴파일러는 순수한 JavaScript도 허용하지 않습니다. 무엇이 잘못되었는지 알아 내려고 노력할 것이다.

파일 확장자를 .ts로 변경하고 다른 코드에서 func 함수를 사용하십시오. 처음에는 모든 것이 잘 보이지만 추악한 버그가 나타납니다. 정적 유형 검사가 도움이 될 것으로 판단하고 코드를 다음과 같이 변경하십시오.

var func=function(n:string){alert(n)};

var data={x:5};
data.z=6;

그러나 이제 이것은 더 이상 유효한 JavaScript 코드가 아니며 컴파일러로 인해 많은 오류 메시지가 생성됩니다. 모든 데이터에는 “z”멤버가 없습니다. … 기본 유형이 항상 “any”이지만 유형 유추가 전혀 쓸모없는 경우이 동작을 피할 수 있습니다.

어떻게이 문제를 해결합니까?
답은 선언 파일입니다. 프로젝트에서 JavaScript 코드를 “있는 그대로”사용하고 몇 개의 .d.ts 파일을 사용하여 정적 유형 검사를 계속할 수 있습니다. 컴파일러는 변수, 메소드 및 “클래스”가 유형을 포함하여 JavaScript 파일에 선언 된 변수를 컴파일러에 알려줍니다. 따라서 컴파일 타임 유형 검사 및 환상적인 인텔리전스를 허용합니다. 내 예제의 .d.ts 파일은

declare var data:any;
declare function func(n:string);

이것을 “myjsfile.d.ts”로 저장하고 다음을 사용하여 typescript로 가져옵니다.

///<reference path="myjsfile.d.ts"/>

컴파일 된 타이프 스크립트 위의 HTML 파일에 JavaScript 스크립트를 포함 시키십시오. 여기의 흥미로운 링크 . “JavaScript를 TypeScript로 변환”섹션에 관심이있을 수 있습니다.


답변

업데이트 : 도구는이 게시물에 자세히 설명되어 있습니다

버전 9 ( EAP 빌드 사용 가능 )로 시작하는 ReSharper 에는 JavaScript 코드를 TypeScript로 자동 변환하는 기능이 있습니다. .js 파일의 이름을 .ts로 바꾸는 것으로 시작하여 다음과 같은 R # 제안을 볼 수 있습니다.

실제 사례에서 시도하지 않았습니다. 그러나 많은 JavaScript 패턴을 변환 할 수 있습니다.


답변

터미널 (mac)에서 :

for f in *.js; do mv $f `basename $f .js`.ts; done;

모든 .js 파일의 이름을 .ts로 바꿉니다.

이것은 다소 혀가 있지만 벤자민이 지적한 것처럼 JavaScript 파일은 유효한 TypeScript입니다. 입니다. JavaScript에 유형, 클래스, 인터페이스 등을 추가 하려면 이러한 개념을 사용하여 코드디자인하고 변경해야합니다. 합니다. 자동 변환이 거의 없거나 전혀 없습니다.

GNU findutils (대부분 * nixes) + Bash를 사용하여 다음을 수행하십시오.

find -type f -name '*.js' -exec bash -c 'mv "${1}" "${1%???}.ts"' bash {} \;


답변