본문 바로가기

Ecmascript/Javascript

[JsDoc] 타입체크 하는 자바스크립트 코딩

타입체크 하는 자바스크립트 코딩

  • 타입스크립트 없이 vscode의 설정과 jsDoc으로 좀 더 타입세이프 하게 코딩 가능

jsconfig.json 생성

  • compilerOptions에 아래와 같은 값들 추가
{
  "compilerOptions": {
    "jsx": "react",
    "module": "commonjs",
    "target": "es2020",
    "checkJs": true
  },
  "exclude": ["node_modules"]
}

JsDoc 작성법

/**
 * @param {array}
 * @param {...*} args 
 * @param {DOMElement} node
 * @param {ReactElement} element
 */
/**
 * optional한 param: 타입=
 * @param {object} param
 * @param {string} param.required
 * @param {string=} param.optional
 */
const A = function ({ required, optional }) {}

/**
 * void 함수: () => void
 * @param {object} param
 * @param {() => void} param.voidFn
 */
const B = function ({ voidFn }) {}

/**
 * 문자열 1(기본값) 아니면 문자열2인 경우: '문자열1' | '문자열2' =
 * @param {object} param
 * @param {'get' | 'post' =} param.method
 * @param {string} param.url

 */
const C = function ({ method = 'get', url }) {}

/**
 * 객체 배열: object[]
 * @param {object} param
 * @param {object[]} param.list
 */
const D = function ({ list }) {}

import { useHistory } from 'react-router-dom';
/**
 * 외부 라이브러리 : import('라이브러리명').속성혹은메서드
 * @param {object} param
 * @param {import('react-router-dom').match} param.match
 */
const E = function ({ match }) {}