이제 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 {} \;