[Javascript] 자바스크립트 타입 체크하기 (JSDoc)

1 분 소요

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 },
];

출처 : https://poiemaweb.com/jsdoc-type-hint`

카테고리:

업데이트: