[Javascript] 자바스크립트 타입 체크하기 (JSDoc)
JSDoc
JavaScript는 동적타입언어이다.
타입이 없진 않지만 명시할 수 없다.
run type의 type이 동적으로 정해지다 보니까 type을 주석으로 달아놓는다.
- JavaScript는 함수 시그니처를 정할 수 없다.
- 타입이 명시되어있지 않아 parameter에 어떤 type의 값이 들어와도 에러가 발생하지 않음
@ts-check
//@ts-check
VS Code에서 다음과 같이 @ts-check
를 주석으로 추가하면 TypeScript처럼 타입 및 에러 체크가 가능하다.
- JSDoc 주석은
/** ... */
사이에 기술한다.
/**
* 게임의 참여 가능 여부 확인
* @param {Game} game 게임 객체
* @returns {boolean}
*/
@type
변수의 타입을 명시
/** @type {string} */
let str;
/** @type {number} */
let num;
/**
* 두 수의 곱을 구한다.
* @type { function(number, number): number }
*/
const multiply = (a, b) => a * b;
@param & @returns
@param은 매개변수 이름을 추가할 수 있다.
대괄호는 선택적 매개변수
/**
* 두 수의 차를 구한다.
* @param {number} a - the first thing
* @param {number} b - the second thing
* @returns {number}
*/
const subtract = (a, b) => a - b;
// Parameters may be declared in a variety of syntactic forms
/**
* @param {string} p1 - A string param.
* @param {string=} p2 - An optional param (Closure syntax)
* @param {string} [p3] - Another optional param (JSDoc syntax).
* @param {string} [p4="test"] - An optional param with a default value
* @return {string} This is the result
*/
function stringsStringStrings(p1, p2, p3, p4) {
// TODO
}
@typedef
@typedef는 복잡한 타입을 정의
/**
* 할일
* @typedef {Object} Todo
* @property {number} id - 할일 id
* @property {string} content - 할일 내용
* @property {boolean} completed - 할일 완료 여부
*/
/**
* 할일 목록
* @type {Todo[]}
*/
const todos = [
{ id: 1, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: true },
{ id: 3, content: 'Javascript', completed: false },
];