자바스크립트 작업하기
이 주제에서는 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 창은 파일 내 기호에 대한 기본 단어 완성을 제공합니다.
타입 정의 및 자동 타입 획득
자바스크립트 라이브러리 및 프레임워크에 대한 IntelliSense는 TypeScript 타입 선언(타입 정의) 파일에 의해 지원됩니다. 타입 선언 파일은 TypeScript로 작성되어 매개변수 및 함수의 데이터 타입을 표현할 수 있으며, 이를 통해 VS Code는 성능이 뛰어난 IntelliSense 경험을 제공합니다.
많은 인기 라이브러리는 타입 정의 파일과 함께 제공되므로 자동으로 IntelliSense를 사용할 수 있습니다. 타입 정의가 포함되지 않은 라이브러리의 경우, VS Code의 자동 타입 획득
기능이 커뮤니티에서 유지 관리하는 타입 정의 파일을 자동으로 설치합니다.
자동 타입 획득은 npmjs, Node.js 패키지 관리자를 필요로 하며, 이는 Node.js 런타임에 포함되어 있습니다. 아래 이미지는 인기 있는 lodash 라이브러리에 대한 메서드 서명, 매개변수 정보 및 메서드 문서를 포함한 IntelliSense를 보여줍니다.
타입 선언 파일은 프로젝트의 package.json
에 나열된 패키지 또는 자바스크립트 파일에 가져온 패키지에 대해 Visual Studio Code에 의해 자동으로 다운로드되고 관리됩니다.
{
"dependencies": {
"lodash": "^4.17.0"
}
}
대안으로, jsconfig.json에서 타입 선언 파일을 획득할 패키지를 명시적으로 나열할 수 있습니다.
{
"typeAcquisition": {
"include": ["jquery"]
}
}
가장 일반적인 자바스크립트 라이브러리는 선언 파일을 포함하거나 사용할 수 있는 타입 선언 파일이 있습니다.
자동 타입 획득을 위한 npm 미설치 경고 수정하기
자동 타입 획득은 npm, Node.js 패키지 관리자를 사용하여 타입 선언(타입 정의) 파일을 설치하고 관리합니다. 자동 타입 획득이 제대로 작동하려면 먼저 머신에 npm이 설치되어 있는지 확인해야 합니다.
터미널 또는 명령 프롬프트에서 npm --version
을 실행하여 npm이 설치되어 있고 사용 가능한지 빠르게 확인할 수 있습니다.
npm은 Node.js 런타임과 함께 설치되며, Nodejs.org에서 다운로드할 수 있습니다. 현재 LTS(장기 지원) 버전을 설치하면 npm 실행 파일이 기본적으로 시스템 경로에 추가됩니다.
npm이 설치되어 있지만 여전히 경고 메시지가 표시되는 경우, typescript.npm
설정을 사용하여 VS Code에 npm이 설치된 위치를 명시적으로 알려줄 수 있습니다. 이 설정은 머신에서 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
로 설정합니다. 자세한 내용은 JavaScript에서 마이그레이션하기를 참조하십시오.
참고:
jsconfig.json
은allowJs
가 true로 설정된tsconfig.json
파일과 동일합니다. 다른 사용 가능한 옵션을 보려면 tsconfig.json 문서를 참조하십시오.
자바스크립트 타입 검사
VS Code는 일반 자바스크립트 파일에서 TypeScript의 고급 타입 검사 및 오류 보고 기능을 활용할 수 있도록 합니다. 이는 일반적인 프로그래밍 실수를 잡 는 좋은 방법입니다. 이러한 타입 검사는 자바스크립트에 대한 흥미로운 빠른 수정 기능을 가능하게 하며, 누락된 가져오기 추가 및 누락된 속성 추가와 같은 기능을 포함합니다.
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("