자바스크립트 작업하기
이 주제는 Visual Studio Code에서 지원하는 고급 자바스크립트 기능에 대해 설명합니다. TypeScript 언어 서비스를 사용하여 VS Code는 스마트 완성(IntelliSense) 및 자바스크립트에 대한 타입 검사를 제공합니다.
IntelliSense
Visual Studio Code의 자바스크립트 IntelliSense는 지능형 코드 완성, 매개변수 정보, 참조 검색 및 기타 많은 고급 언어 기능을 제공합니다. 우리의 자바스크립트 IntelliSense는 TypeScript 팀이 개발한 자바스크립트 언어 서비스에 의해 구동됩니다. 대부분의 자바스크립트 프로젝트에서 별도의 구성 없이 IntelliSense가 작동해야 하지만, JSDoc을 사용하거나 jsconfig.json
프로젝트를 구성하여 IntelliSense를 더욱 유용하게 만들 수 있습니다.
자바스크립트 IntelliSense가 작동하는 방식에 대한 자세한 내용은 타입 추론, JSDoc 주석, TypeScript 선언 및 자바스크립트와 TypeScript 프로젝트 혼합을 포함하여 자바스크립트 언어 서비스 문서를 참조하십시오.
타입 추론이 원하는 정보를 제공하지 않는 경우, JSDoc 주석을 사용하여 타입 정보를 명시적으로 제공할 수 있습니다. 이 문서는 현재 지원되는 JSDoc 주석에 대해 설명합니다.
객체, 메서드 및 속성 외에도 자바스크립트 IntelliSense 창은 파일의 기호에 대한 기본 단어 완성도 제공합니다.
Typings 및 Automatic Type Acquisition
자바스크립트 라이브러리 및 프레임워크에 대한 IntelliSense는 TypeScript 타입 선언(typings) 파일에 의해 구동됩니다. 타입 선언 파일은 TypeScript로 작성되어 매개변수 및 함수의 데이터 타입을 표현할 수 있으므로 VS Code가 성능 좋은 방식으로 풍부한 IntelliSense 경험을 제공할 수 있습니 다.
많은 인기 있는 라이브러리는 typings 파일을 함께 제공하므로 자동으로 IntelliSense를 사용할 수 있습니다. typings을 포함하지 않는 라이브러리의 경우, VS Code의 Automatic Type Acquisition
이 커뮤니티에서 유지 관리하는 typings 파일을 자동으로 설치합니다.
Automatic Type Acquisition은 npmjs, Node.js 패키지 관리자가 필요하며, 이는 Node.js 런타임에 포함되어 있습니다. 이 이미지에서 인기 있는 lodash 라이브러리에 대한 메서드 시그니처, 매개변수 정보 및 메서드 설명서를 포함한 IntelliSense를 볼 수 있습니다.
타입 선언 파일은 프로젝트의 package.json
에 나열된 패키지 또는 자바스크립트 파일에 가져온 패키지에 대해 Visual Studio Code에 의해 자동으로 다운로드되고 관리됩니다.
{
"dependencies": {
"lodash": "^4.17.0"
}
}
대신 jsconfig.json에 타입 선언 파일을 획득할 패키지를 명시적으로 나열할 수 있습니다.
{
"typeAcquisition": {
"include": ["jquery"]
}
}
대부분의 일반적인 자바스크립트 라이브러리는 선언 파일을 함께 제공하거나 타입 선언 파일을 사용할 수 있습니다.
Automatic Type Acquisition을 위한 npm 설치 경고 수정
Automatic Type Acquisition은 npm, Node.js 패키지 관리자를 사용하여 타입 선언(typings) 파일을 설치하고 관리합니다. Automatic Type Acquisition이 제대로 작동하려면 먼저 npm이 컴퓨터에 설치되어 있는지 확인하십시오.
터미널 또는 명령 프롬프트에서 npm --version
을 실행하여 npm이 설치되어 사용 가능한지 빠르게 확인할 수 있습니다.
npm은 Node.js 런타임과 함께 설치되며, 이는 Nodejs.org에서 다운로드할 수 있습니다. 현재 LTS(장기 지원) 버전을 설치하면 npm 실행 파일이 기본적으로 시스템 경로에 추가됩니다.
npm이 설치되어 있지만 여전히 경고 메시지가 표시되는 경우, typescript.npm
설정을 사용하여 npm이 설치된 위치를 VS Code에 명시적으로 지정할 수 있습니다. 이는 컴퓨터의 npm 실행 파일의 전체 경로로 설정해야 하며, 이는 작업 공간에서 패키지를 관리하는 데 사용하는 npm 버전과 일치할 필요는 없습니다. typescript.npm
은 TypeScript 2.3.4+가 필요합니다.
예를 들어, Windows에서 settings.json
파일에 다음과 같은 경로를 추가합니다:
{
"typescript.npm": "C:\\Program Files\\nodejs\\npm.cmd"
}
자바스크립트 프로젝트 (jsconfig.json)
디렉터리에 jsconfig.json 파일이 있으면 해당 디렉터리가 자바스크립트 프로젝트의 루트임을 나타냅니다. jsconfig.json
은 자바스크립트 언어 서비스에서 제공하는 언어 기능에 대한 루트 파일 및 옵션을 지정합니다. 일반적인 설정의 경우 jsconfig.json
파일이 필요하지 않지만, jsconfig.json
을 추가해야 하는 상황이 있습니다.
- 모든 파일이 자바스크립트 프로젝트에 포함되지 않아야 하는 경우(예: 일부 파일을 IntelliSense에 표시하지 않으려는 경우). 이 상황은 프론트엔드 및 백엔드 코드에서 일반적입니다.
- 작업 공간에 둘 이상의 프로젝트 컨텍스트가 포함된 경우. 이 경우 각 프로젝트의 루트 폴더에
jsconfig.json
파일을 추가해야 합니다. - TypeScript 컴파일러를 사용하여 자바스크립트 소스 코드를 다운 레벨 컴파일하는 경우.
jsconfig.json의 위치
자바스크립트 프로젝트로 코드를 정의하려면 아래와 같이 자바스크립트 코드의 루트에 jsconfig.json
을 생성하십시오. 자바스크립트 프로젝트는 프로젝트의 소스 파일이며 파생되거나 패키징된 파일(예: dist
디렉터리)을 포함하지 않아야 합니다.
더 복잡한 프로젝트에서는 작업 공간 내에 둘 이상의 jsconfig.json
파일이 정의될 수 있습니다. 이렇게 하면 한 프로젝트의 소스 코드가 다른 프로젝트의 IntelliSense에 나타나지 않도록 할 수 있습니다.
아래는 client
및 server
폴더가 있는 프로젝트로, 두 개의 별도 자바스크립트 프로젝트를 보여줍니다:
jsconfig.json 작성
아래는 jsconfig.json
파일의 간단한 템플릿으로, 자바스크립트 target
을 ES6
로 정의하고 exclude
속성은 node_modules
폴더를 제외합니다. 이 코드를 jsconfig.json
파일에 복사하여 붙여넣을 수 있습니다.
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES6"
},
"exclude": ["node_modules", "**/node_modules/*"]
}
exclude
속성은 언어 서비스에 소스 코드의 일부가 아닌 파일 을 알려줍니다. IntelliSense가 느린 경우, exclude
목록에 폴더를 추가하십시오(VS Code는 느린 완성을 감지하면 이를 수행하도록 프롬프트합니다). 빌드 프로세스에서 생성된 파일(예: dist
디렉터리)을 exclude
해야 합니다. 이러한 파일은 제안이 두 번 나타나게 하고 IntelliSense를 느리게 만듭니다.
include
속성을 사용하여 프로젝트의 파일을 명시적으로 설정할 수 있습니다. include
속성이 없으면 기본적으로 포함된 디렉터리 및 하위 디렉터리의 모든 파일을 포함합니다. include
속성이 지정된 경우, 해당 파일만 포함됩니다.
다음은 명시적 include
속성이 있는 예입니다:
{
"compilerOptions": {
"module": "CommonJS",
"target": "ES6"
},
"include": ["src/**/*"]
}
최선의 방법은 단일 src
폴더와 함께 include
속성을 사용하는 것입니다. exclude
및 include
의 파일 경로는 jsconfig.json
의 위치를 기준으로 상대적입니다.
자세한 내용은 전체 jsconfig.json 문서를 참조하십시오.
TypeScript로 마이그레이션
혼합된 TypeScript 및 자바스크립트 프로젝트를 가질 수 있습니다. TypeScript로 마이그레이션을 시작하려면 jsconfig.json
파일 이름을 tsconfig.json
으로 변경하고 allowJs
속성을 true
로 설정하십시오. 자세한 내용은 자바스크립트에서 마이그레이션을 참조하십시오.
jsconfig.json
은 allowJs
가 true로 설정된 tsconfig.json
파일과 동일합니 다. 다른 사용 가능한 옵션을 보려면 tsconfig.json 문서를 참조하십시오.
자바스크립트 타입 검사
VS Code는 일반 자바스크립트 파일에서 TypeScript의 고급 타입 검사 및 오류 보고 기능을 활용할 수 있습니다. 이는 일반적인 프로그래밍 실수를 잡는 훌륭한 방법입니다. 이러한 타입 검사는 Add missing import 및 Add missing property와 같은 유용한 자바스크립트 빠른 수정 기능도 지원합니다.
TypeScript는 .js
파일에서 .ts
파일과 동일하게 타입을 추론할 수 있습니다. 타입을 추론할 수 없는 경우, JSDoc 주석을 사용하여 지정할 수 있습니다. TypeScript가 자바스크립트 타입 검사를 위해 JSDoc을 사용하는 방법에 대한 자세한 내용은 자바스크립트 파일 타입 검사를 참조하십시오.
자바스크립트의 타입 검사는 선택 사항이며 직접 활성화 해야 합니다(옵트인 방식). ESLint와 같은 기존 자바스크립트 유효성 검사 도구는 새로운 내장 타입 검사 기능과 함께 사용할 수 있습니다.
필요에 따라 몇 가지 다른 방법으로 타입 검사를 시작할 수 있습니다.
파일별
자바스크립트 파일에서 타입 검사를 활성화하는 가장 쉬운 방법은 파일 상단에 // @ts-check
를 추가하는 것입니다.
// @ts-check
let itsAsEasyAs = "abc";
itsAsEasyAs = 123; // 오류: 타입 '123'은(는) 타입 'string'에 할당할 수 없습니다.
// @ts-check
를 사용하는 것은 몇 개의 파일에서 타입 검사를 시도하고 싶지만 아직 전체 코드베이스에 대해 활성화하지 않으려는 경우 좋은 접근 방식입니다.
설정을 사용하여
코드를 변경하지 않고 모든 자바스크립트 파일에 대해 타입 검사를 활성화하려면 작업 공간 또는 사용자 설정에 "js/ts.implicitProjectConfig.checkJs": true
를 추가하십시오. 이는 jsconfig.json
또는 tsconfig.json
프로젝트의 일부가 아닌 모든 자바스크립트 파일에 대해 타입 검사를 활성화합니다.
개별 파일을 타입 검사에서 제외하려면 파일 상단에 // @ts-nocheck
주석을 추가하십시오:
// @ts-nocheck
let easy = "abc";
easy = 123; // 오류 없음
자바스크립트 파일에서 개별 오류를 비활성화하려면 오류 전 줄에 // @ts-ignore
주석을 추가하십시오:
let easy = "abc";
// @ts-ignore
easy = 123; // 오류 없음
jsconfig 또는 tsconfig 사용
jsconfig.json
또는 tsconfig.json
의 일부인 자바스크립트 파일에 대해 타입 검사를 활성화하려면 프로젝트의 컴파일러 옵션에 "checkJs": true
를 추가하십시오:
jsconfig.json
:
{
"compilerOptions": {
"checkJs": true
},
"exclude": ["node_modules", "**/node_modules/*"]
}
tsconfig.json
:
{
"compilerOptions": {
"allowJs": true,
"checkJs": true
},
"exclude": ["node_modules", "**/node_modules/*"]
}
이렇게 하면 프로젝트의 모든 자바스크립트 파일에 대해 타입 검사가 활성화됩니다. 파일별로 타입 검사를 비활성화하려면 // @ts-nocheck
를 사용할 수 있습니다.
자바스크립트 타입 검사는 TypeScript 2.3이 필요합니다. 작업 공간에서 현재 활성화된 TypeScript 버전을 확인하려면 TypeScript: Select TypeScript Version 명령을 실행하십시오. 이 명령을 실행하려면 편집기에서 .js/.ts
파일을 열어야 합니다. TypeScript 파일을 열면 버전이 오른쪽 하단에 표시됩니다.
전역 변수 및 타입 검사
레거시 자바스크립트 코드에서 전역 변수 또는 비표준 DOM API를 사용하는 경우:
window.onload = function () {
if (window.webkitNotifications.requestPermission() === CAN_NOTIFY) {
window.webkitNotifications.createNotification(null, "Woof!", "🐶").show();
} else {
alert("Could not notify");
}
};
위의 코드에서 // @ts-check
를 사용하려고 하면 전역 변수 사용에 대한 여러 오류가 표시됩니다:
Line 2
-Property 'webkitNotifications' does not exist on type 'Window'.
Line 2
-Cannot find name 'CAN_NOTIFY'.
Line 3
-Property 'webkitNotifications' does not exist on type 'Window'.
// @ts-check
를 계속 사용하고 싶지만 이러한 문제가 실제로 애플리케이션의 문제가 아니라고 확신하는 경우, 이러한 전역 변수에 대해 TypeScript에 알려야 합니다.
시작하려면 프로젝트의 루트에 jsconfig.json 생성을 생성하십시오:
{
"compilerOptions": {},
"exclude": ["node_modules", "**/node_modules/*"]
}
변경 사항이 적용되었는지 확인하려면 VS Code를 다시 로드하십시오. jsconfig.json
의 존재는 TypeScript에 자바스크립트 파일이 더 큰 프로젝트의 일부임을 알려줍니다.
이제 작업 공간의 어느 곳에든 globals.d.ts
파일을 생성하십시오:
interface Window {
webkitNotifications: any;
}
declare var CAN_NOTIFY: number;
d.ts
파일은 타입 선언입니다. 이 경우, globals.d.ts
는 TypeScript에 전역 CAN_NOTIFY
가 존재하고 window
에 webkitNotifications
속성이 존재함을 알려줍니다. d.ts
파일 작성에 대한 자세한 내용은 TypeScript 문서를 참조하십시오. d.ts
파일은 자바스크립트가 평가되는 방식을 변경하지 않으며, 더 나은 자바스크립트 언어 지원을 제공하는 데만 사용됩니다.
작업 사용
TypeScript 컴파일러 사용
TypeScript의 주요 기능 중 하나는 최신 자바스크립트 언어 기능을 사용하고, 이러한 최신 기능을 아직 이해하지 못하는 자바스크립트 런타임에서 실행할 수 있는 코드를 내보내는 기능입니다. 자바스크립트도 동일한 언어 서비스를 사용하므로 이제 이 기능을 활용할 수 있습니다.
TypeScript 컴파일러 tsc
는 자바스크립트 파일을 ES6에서 다른 언어 수준으로 다운 레벨 컴파일할 수 있습니다. 원하는 옵션으로 jsconfig.json
을 구성한 다음 –p
인수를 사용하여 tsc
가 jsconfig.json
파일을 사용하도록 하십시오. 예를 들어 tsc -p jsconfig.json
을 사용하여 다운 레벨 컴파일을 수행합니다.
다운 레벨 컴파일에 대한 컴파일러 옵션에 대한 자세한 내용은 jsconfig 문서를 참조하십시오.