Typescript: ๋ธ”๋ก ๋ฒ”์œ„ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ @ts-ignore

์— ๋งŒ๋“  2017๋…„ 10์›” 30์ผ  ยท  88์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/TypeScript

ํ˜„์žฌ @ts-ignore๋Š” ๋ฐ”๋กœ ์•„๋ž˜ ์ค„์˜ ์˜ค๋ฅ˜๋งŒ ์Œ์†Œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์— ๋Œ€ํ•ด ๊ฐ™์€ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ๋‹ค์Œ ๋ธ”๋ก ์ „์ฒด
  2. ๋˜ํ•œ ๋ชจ๋“  ์ˆ˜์ž…ํ’ˆ์— ๋Œ€ํ•ด

์‚ฌ์šฉ ์‚ฌ๋ก€:

๋ฆฌํŒฉํ† ๋ง: ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ์—†์ด๋Š” ๋ฌด์—‡์ด ์ค‘๋‹จ๋ ์ง€ ํ™•์ธํ•˜์ง€๋งŒ ์ฃผ์„ ์ฒ˜๋ฆฌ๋œ ์ฝ”๋“œ๊ฐ€ ๋งŽ์„ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋Š” ํ”ผํ•ฉ๋‹ˆ๋‹ค.

Awaiting More Feedback Suggestion VS Code Tracked

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

// @ts-ignore-start
// @ts-ignore-end

๋‹ค์Œ๊ณผ ๊ฒฐํ•ฉ ๊ฐ€๋Šฅ: https://github.com/Microsoft/TypeScript/issues/19139

// @ts-ignore-start Property_0_does_not_exist_on_type_1
// @ts-ignore-end (possible include the error type again so you can turn be more specific of where you want to ignore some errors

@marianturchyn ์ด๊ฒƒ์€ tslint๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ชจ๋“  88 ๋Œ“๊ธ€

๋กค์ด ํ•„์š”ํ•ด

์ด ๊ธฐ๋Šฅ์˜ ํ˜„์žฌ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๊ณต๋ฐฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•ฉ๋‹นํ•œ ์ด์œ ๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ "ํ›„ํ–‰ ๊ณต๋ฐฑ ์—†์Œ" ๊ทœ์น™์„ ์„ค์ •ํ–ˆ์ง€๋งŒ ๋ธ”๋ก ์ˆ˜์ค€์—์„œ ์ด๋ฅผ ์••๋„ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ES6 ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ›„ํ–‰ ๊ณต๋ฐฑ ๋ฐ ์บ๋ฆฌ์ง€ ๋ฆฌํ„ด์„ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. .

Mathjs์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • ๋ฒˆ๋“ค๋ง _ a.k.a partial import _ ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ค‘ ํ•˜๋‚˜

// tslint:disable:no-var-requires
import core from 'mathjs/core'

// @ts-ignore
import mathUnit from 'mathjs/lib/type/unit'
// @ts-ignore
import mathExpression from 'mathjs/lib/expression/function'
// @ts-ignore
import mathArithmatic from 'mathjs/lib/function/arithmetic'


const math = core.create()
// math.import(require('mathjs/lib/type/unit'))
// math.import(require('mathjs/lib/expression/function')) // compile, eval
// math.import(require('mathjs/lib/function/arithmetic')) // basic arithmetic like divide, exponent, etc

math.import(mathUnit)
math.import(mathExpression) // compile, eval
math.import(mathArithmatic) // basic arithmetic like divide, exponent, etc

export const unit = math.unit
export const createUnit = math.createUnit
export const compile = math.compile

์ „์ฒด ํŒŒ์ผ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ES5๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์ง€๊ธˆ์€ Babel์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ES6 JS ์ฝ”๋“œ๋ฅผ ์ƒ์†๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์„ .ts๋กœ ๋ฐ”๊พธ๊ณ  TS๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ptallett allowJs ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ $ .js ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์ปดํŒŒ์ผ์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํŒŒ์ผ ์ƒ๋‹จ์— // @ts-check ์ฃผ์„์ด ์—†๊ฑฐ๋‚˜ checkJs ๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ .js ํŒŒ์ผ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ด ๊ธฐ๋Šฅ์„ ์ข‹์•„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํŒŒ์ผ์— ์•‰์•„ ์žˆ๊ณ  ํ™•์žฅ์ž๊ฐ€ .ts์ด๋ฏ€๋กœ ์–ด๋–ค ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์–ด๋””๋กœ ๊ฐ€๋Š”์ง€ ๊ฐ€์ ธ์˜ค๊ณ  ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ src ํŒŒ์ผ ์˜†์˜ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์€ ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. .

์˜๋„์ ์œผ๋กœ ์ผ๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์— ์›๋ž˜ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์œ ํ˜•์„ ์ง€์ •ํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„์˜ ์ค„์€ ์ด์ œ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ ๋Ÿฐํƒ€์ž„์—๋„ ํ™•์ธํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋„์ฒ˜์— ๋นจ๊ฐ„ ์„ ์ด ๋งŽ์ด ์—†๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ?

lodash ๋ฐ ํŠนํžˆ lodash/fp ๋ฅผ TypeScript์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ณ ํ†ต์Šค๋Ÿฝ๊ณ , lodash ๋ฐ @types/lodash ์˜ ์ตœ์‹  ๋ฒ„์ „์—์„œ๋„ ๋งค์šฐ ์• ๋งคํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋กœ ๋๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ธ”๋ก์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•˜๋Š” @ts-ignore-block ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด _๋‹น์‹ ์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋Š”_๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์•„์ฃผ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :-)

์ €๋Š” ์ˆ˜๋งŽ์€ ์ „์—ญ ๋ฒ”์œ„ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์ค„์— @ts-ignore๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ง€๋ฃจํ•ด์ง‘๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ์ด ์š”์ฒญ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

์ด๊ฒƒ์€ ๋˜ํ•œ ๋‚ด๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ์ผ(์ฆ‰, ์ฝ”๋“œ ๋ธ”๋ก์— ๋Œ€ํ•œ ํŠน์ • ๊ฒ€์‚ฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” ์ƒ์„ฑ๋œ Vue ํ…œํ”Œ๋ฆฟ ๋ Œ๋” ๊ธฐ๋Šฅ ์œ ํ˜• ๊ฒ€์‚ฌ)์— ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ์™€ ํ•จ๊ป˜ #19139๋Š” ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ฝ”๋“œ์˜ ๋งŽ์€ ๋ถ€๋ถ„์— ์ ์šฉํ•  ๋•Œ ํŠน์ • ๊ฒ€์‚ฌ๋งŒ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ตฌ๋ฉ ํŒŒ์ผ์„ ์–ต์ œํ•˜๋ฉด ์ž‘์—… ๊ณต๊ฐ„ ์„ค์ • ๋“ฑ์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด vs ์ฝ”๋“œ์™€ ๊ฐ™์€ ํŽธ์ง‘๊ธฐ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. graphql-code-generator ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด GraphQL ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ์œ ํ˜•์œผ๋กœ ์ „์ฒด ts ํŒŒ์ผ์„ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์œผ๋ฉฐ noUnusedLocals๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ด€๋ จ ์—†๋Š” ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

// @ts-ignore-start
// @ts-ignore-end

๋‹ค์Œ๊ณผ ๊ฒฐํ•ฉ ๊ฐ€๋Šฅ: https://github.com/Microsoft/TypeScript/issues/19139

// @ts-ignore-start Property_0_does_not_exist_on_type_1
// @ts-ignore-end (possible include the error type again so you can turn be more specific of where you want to ignore some errors

@marianturchyn ์ด๊ฒƒ์€ tslint๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋•Œ๋•Œ๋กœ ๋ฌผ๊ฑด์„ ์˜ฎ๊ธฐ๊ณ  ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๋™์•ˆ CLI ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ „์ฒด ํŒŒ์ผ์„ ์ผ์‹œ์ ์œผ๋กœ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(์ฆ‰, ์ปดํŒŒ์ผํ•˜์ง€ ์•Š์Œ).

๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์‰ฌ์šด ๊ฒƒ์€ ํŒŒ์ผ ๋งจ ์œ„์— ์žˆ๋Š” ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.

// @ts-ignore-file

@lonix1 ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

// @ts-ignore-start
// @ts-ignore-end

// @ts-ignore-end ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๋ฆฐํŠธ ๋„๊ตฌ๊ฐ€ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@mgol ์ด ์Šค๋ ˆ๋“œ๋ฅผ ํƒˆ์„ ์‹œํ‚ค๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ ์ œ์•ˆ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! - ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํŒŒ์ผ์˜ ์ƒ๋‹จ์— ์ค„์„ ํ•จ๊ป˜ ๋„ฃ๊ณ  ์ƒ๋‹จ์— ํ•˜๋‚˜๋ฅผ, ํ•˜๋‹จ์— ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@lonix1 @Blanen ์˜ ์ œ์•ˆ์ด ๋‹น์‹ ์—๊ฒŒ๋„ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค // @ts-ignore-start + // @ts-ignore-end ์™€ // @ts-ignore-file ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด TypeScript๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. // @ts-ignore-start + // @ts-ignore-end ์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

@DanielRosenwasser ์ด๊ฒƒ์€ ๋นŒ๋“œ ์ค‘์— ts ํŒŒ์ผ์ด ๋‹ค๋ฅธ ํด๋”์— ์ €์žฅ๋  ๋•Œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ts ํŒŒ์ผ ์˜†์— js ํŒŒ์ผ์„ ๋ฐฐ์น˜ํ•˜๋„๋ก ์„ค์ •๋˜๋ฉด ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ js ํŒŒ์ผ์ด '์ปดํŒŒ์ผ'๋ฉ๋‹ˆ๊นŒ(์˜ˆ: es5๋กœ ๋ณ€ํ™˜)? ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์ „์†กํ•  ๋•Œ ์ด๊ฒƒ์€ ์ •๋ง ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€:

TypeORM ์€ null์„ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ์—ด์ด ์žˆ๋Š” DB ์—”ํ„ฐํ‹ฐ ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์—ด(๋”ฐ๋ผ์„œ)์€ nullable์ด ์•„๋‹ˆ๋ฏ€๋กœ ์†์„ฑ์ด ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์ •์˜๋œ ํŠน์ • ์œ ํ˜•์ธ ๊ฒƒ์ฒ˜๋Ÿผ ํด๋ž˜์Šค ์ •์˜๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋Š” ์ฒ˜๋ฆฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Typescript์—์„œ๋Š” ๋ชจ๋“  ์—ด์„ ๊ฐ•๋ ฅํ•œ ํ˜•์‹์œผ๋กœ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งŽ์€ ์—”ํ‹ฐํ‹ฐ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

@Entity('investigation')
export class InvestigationEntity {
    @PrimaryGeneratedColumn('uuid')
    // @ts-ignore TS2564
    public investigationId: string;

    @Column({ type: 'uuid' })
    // @ts-ignore TS2564
    public userId: string;

    @Column({ type: 'jsonb' })
    // @ts-ignore TS2564
    public metadata: IEncryptedJSONContainer;
}

๋ชจ๋“  ์—ด์€ ํ•„์ˆ˜์ด๋ฉฐ (๋”ฐ๋ผ์„œ) ๊ฐ’์„ ํฌํ•จํ•ด์•ผ ํ•˜์ง€๋งŒ TypeORM์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด ๋ชจ๋“  ์†์„ฑ์€ ์ดˆ๊ธฐํ™”๊ฐ€ ์—†๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ํด๋ž˜์Šค(๋”ฐ๋ผ์„œ/๋˜๋Š” ํŒŒ์ผ)์— ๋Œ€ํ•ด ์ด ํŠน์ • ORM ํŒŒ์ƒ/ํŠน์ • ๋ฌธ์ œ๋ฅผ ์–ต์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

@haggholm public metadata!: IEncryptedJSONContainer ts-ignore ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@RyanCavanaugh ๋ฌด์ง€! ๋‚˜๋Š” ๋ฌธ์„œ์—์„œ ๊ทธ ๊ธฐ๋Šฅ์„ ๋†“์ณค๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค; ๋ฌด์‹œํ•˜์„ธ์š”.

๋‚˜๋Š” ํ•˜๊ณ  ์‹ถ๋‹ค

// @ts-ignore-start
--strick null ๊ฒ€์‚ฌ, ํ•˜๋‚˜์˜ ํŠน์ • ํŒŒ์ผ์— ๋Œ€ํ•ด

์ด๊ฒƒ์ด typescript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ณต๊ฐœ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ชจ์Šต์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ฌด์‹œ์— ์ „๋…ํ•˜๋Š” 6 ์ค„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”์ฐํ•œ. ๋‚ด ๋ˆˆ์„ ํ”ผํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก ๋ฌด์‹œ์— ๋Œ€ํ•œ ๋ชจ๋“  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

it('TestNode_ReconnectionsWorkload', async function () {
    for (let i = 0; i < 1; i++) {
        nodes.push(await Node.NewNode(serverUrl, {
            handlers: {
                active: async function (n: Node) {
                    try {
                        // @ts-ignore
                        if (n.view.Empty()) {
                            // @ts-ignore
                            if (n.conns.Empty() && !n.server) {
                                // @ts-ignore
                                await n.login(n.address);
                            }
                            return;
                        }

                        const data = new flats.Message({
                            // @ts-ignore
                            id: n.id,
                            type: flats.MessageType.Data,
                            data: 'hello world',
                        });

                        const dataBytes = data.toBytes();
                        const dataBase64 = base64.encode(dataBytes);
                        // @ts-ignore
                        const dataSigBytes = await n.sign(dataBytes);
                        const dataSigBase64 = base64.encode(dataSigBytes);

                        // @ts-ignore
                        for (const conn of n.conns.Iter()) {
                            conn.Send(`${dataBase64}.${dataSigBase64}`);
                        }
                    } catch (error) {
                        console.log(error);
                    }
                },
            },
        }));
    }

    for (const node of nodes) {
        await node.Wait();
    }
});

๊ธ€์Ž„, ๋‚˜๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ์ด ๋ฌธ์ œ๊ฐ€ ๊ทธ๊ฒƒ์„ ๋‹ค๋ฃฐ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ts-ignore ๋Š” ์—ฌ๋Ÿฌ ์ค„ ๋ฐ ํ•œ ์ค„ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค!

ํƒ€์ดํ•‘์ด ์—†๊ฑฐ๋‚˜ NoImplicitAny ์—†์ด ์ž‘์„ฑ๋œ npm ๋ชจ๋“ˆ์ด ์—ฌ์ „ํžˆ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
"์•”์‹œ์ " ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

import { a, b } from 'MyNonTypedModule' // <-- Implicit any error

๋”ฐ๋ผ์„œ @ts-ignore๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

//@ts-ignore
import { a, b } from 'MyNonTypedModule'

๊ทธ๋Ÿฌ๋‚˜ Prettier์™€ ๊ฐ™์€ ์ž๋™ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ํฌ๋งทํ„ฐ๋กœ ์ž‘์—…ํ•  ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
(Prettier์—์„œ ํฌ๋งท)

//@ts-ignore
import { 
  a, 
  b 
} from 'MyNonTypedModule' // <-- Still (again) getting the Implicit any error

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์žˆ๋‹ค:

import { 
 a, 
 b
//@ts-ignore
 } from 'MyNonTypedModule'

๋˜๋Š”

//@ts-ignore-start
import { 
   a, 
   b
} from 'MyNonTypedModule'
//@ts-ignore-end

๊ทธ๋Ÿฌ๋‚˜ ํ•œ ์ค„ ๊ฐ€์ ธ์˜ค๊ธฐ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

//@ts-ignore-start
import { a } from 'MyNonTypedModule'
//@ts-ignore-end
import { b } from 'SomeTypedModule'
//@ts-ignore-start
import { c } from 'SomeOtherNonTypedModule'
//@ts-ignore-end

๋ชจ๋“ˆ์—์„œ ๊ฐ€์ ธ์˜จ ์š”์†Œ์˜ ์ˆ˜์— ๋”ฐ๋ผ ์ž๋™ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ์„œ์‹์ด ํ•œ ์ค„ ๊ฐ€์ ธ์˜ค๊ธฐ์™€ ์—ฌ๋Ÿฌ ์ค„ ๊ฐ€์ ธ์˜ค๊ธฐ ๊ฐ„์— ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ€์ ธ์˜ค๊ธฐ ์ฝ”๋“œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ž๋™ ๊ฐ€์ ธ์˜ค๊ธฐ์˜ ๋ชฉ์ ์ด ์‹ค์ œ๋กœ ๋ฌดํšจํ™”๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋‹จ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•ด ts-ignore-start ๋ฐ ts-ignore-end๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ: //@ts-ignore ๊ฐ€์ ธ์˜ค๊ธฐ(๋‹ค์Œ ์ค„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ)๋Š” ts-ignore๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋˜๋Š” @ts-ignore-block / @ts-ignore-import์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฌด์‹œ)

์ „์ฒด ํŒŒ์ผ์—์„œ ํŠน์ • ์˜ค๋ฅ˜๋ฅผ ์–ต์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

// @ts-ignore-all TS1206

/*
... rest of the file
*/

์ด ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด // @ts-ignore-start ๋ฐ // @ts-ignore-end ์ฃผ์„์„ ์ œ์•ˆํ•œ ์œ„์˜ ์‚ฌ๋žŒ๋“ค๊ณผ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ˜„์žฌ // @ts-ignore ์ง€์‹œ๋ฌธ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ณ  ๋งจ ์œ„์— // @ts-ignore-start ์ง€์‹œ๋ฌธ์ด ์žˆ๋Š” ํŒŒ์ผ์˜ ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์—ฌ๋Ÿฌ ์ œ์•ˆ์— ๋Œ€ํ•œ ๊ธ์ •์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ œ์•ˆ:

ํ˜„์žฌ ๋™์ž‘์œผ๋กœ @ts-ignore
@ts-ignore TSxxx [TSxxx ...] ํŠน์ • ์˜ค๋ฅ˜ ์–ต์ œ
@ts-ignore-start ๋ฌด์‹œํ•  ๋ธ”๋ก ์‹œ์ž‘
@ts-ignore-start TSxxx [TSxxx ...] ๋ธ”๋ก์— ๋Œ€ํ•œ ํŠน์ • ์˜ค๋ฅ˜ ์–ต์ œ
@ts-ignore-end ์—”๋“œ ๋ธ”๋ก
@ts-ignore-all ๋‚˜๋จธ์ง€ ํŒŒ์ผ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ์–ต์ œ
@ts-ignore-all TSxxx [TSxxx ...] ๋‚˜๋จธ์ง€ ํŒŒ์ผ์— ๋Œ€ํ•œ ํŠน์ • ์˜ค๋ฅ˜ ์–ต์ œ

"ํŠน์ • ์˜ค๋ฅ˜"์—๋Š” tsconfig ๋˜๋Š” TSxxx ์˜ค๋ฅ˜์˜ ์‚ฌ์šฉ์ž ์ •์˜ ๊ทธ๋ฃน๊ณผ ์œ ์‚ฌํ•œ ๋ช…๋ช…๋œ ๊ทธ๋ฃน์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ์„ ์ค‘์ฒฉํ•˜๋Š” ๋ฌด์‹œ ๋ธ”๋ก์˜ ๊ฐ’์ด ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ธฐ๋ณธ ์„ค์ •์€ ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ ํŒŒ์ผ ๋‚ด์—์„œ ๋ช…์‹œ์ ์ธ ts-ignore ๋ธ”๋ก์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ด์— ๋Œ€ํ•œ ์ด์œ ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ๊ฒฝ๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

์›ํ•˜๋Š” .tsignore ํŒŒ์ผ

.npmignore ๋ฐ .gitignore ์ฒ˜๋Ÿผ

image

๋ฌด์‹œ ๋ธ”๋ก์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” puppeteer ํ”„๋ ˆ์ž„ ์›Œํฌ์— ๊ฐ‡ํ˜”์Šต๋‹ˆ๋‹ค. puppeteer์—๋Š” ํŽ˜์ด์ง€์—์„œ ์ž„์˜์˜ ์Šคํฌ๋ฆฝํŠธ ๋ธ”๋ก์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” "ํ‰๊ฐ€" ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž„์˜์˜ ์Šคํฌ๋ฆฝํŠธ ๋ธ”๋ก์€ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•จ์ˆ˜ ์ฐธ์กฐ๋Š” ๋Ÿฐํƒ€์ž„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// @ts-ignore-start
// @ts-ignore-end

์ด๊ฒƒ์€ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ๋กœ ์ž‘์—…ํ•  ๋•Œ ๋งค์šฐ ํŽธ๋ฆฌํ•˜์—ฌ ์‚ฌ๋žŒ๋“ค์ด TypeScript๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋œ ๊ณ ํ†ต์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์— ๋Œ€ํ•œ

// @ts-ignore-start
// @ts-ignore-end

์ด์ „์— ์ด ์ œ์•ˆ์„ ํ–ˆ๊ณ  ๊ตฌ๋ฌธ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์‹œ์ž‘-์ค‘์ง€ ๋˜๋Š” ์‹œ์ž‘-์ข…๋ฃŒ๋กœ ์„ค์ •
start ๋ฐ end (๋™์‚ฌ)๋Š” ๋ฐ˜์˜์–ด๊ฐ€ ์•„๋‹ˆ๋ฉฐ ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ์— ๋“ค์–ด๊ฐ€๋ฉด ์˜์›ํžˆ ๊ท€์ฐฎ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฒ ๋ฉ‹์ง„ ์ผ์ด์•ผ

// @ts-ignore-begin
// @ts-ignore-end

๋งค์šฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? :-(

๋‚˜๋„ ์ฐจ๋‹จ ๋ฌด์‹œ๊ฐ€ ํ•„์š”ํ•ด

+1

+1

์ด๊ฒƒ์— ๋Œ€ํ•œ ์–ด๋–ค ์—…๋ฐ์ดํŠธ?

๐Ÿ™๐Ÿป

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ: ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ vars๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” TS ์ฝ”๋“œ(์˜ˆ: swagger ์‚ฌ์šฉ)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฆ‰์‹œ ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

+1

//@ts-ignore-file ์—†์ด๋Š” TS๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•„๋ฌด๋„ ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋‹ค.

@RyanCavanaugh ์ปค๋ฎค๋‹ˆํ‹ฐ์—๋Š” ๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”!

Typescript๊ฐ€ ์šธ๊ณ  ๋‚ด ๋ Œ๋”๋ง์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ž‘๋™ํ•˜๋Š” ์†”๋ฃจ์…˜์„ ๊ฐ€์ง€๊ณ  ๋†€ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ์ด๊ฒƒ์œผ๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ด€์‹ฌ์ด ์—†๋Š” ์ผ๋ถ€ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋…ธ๋“œ ์œ ํ˜•์ด ์žˆ๋Š” ๊ณต๊ฐœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์ผ ๊ฐ€์ ธ์˜ค๊ธฐ์— // @ts-ignore๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. skipLibCheck ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์‹œํ•˜๋Š” ๋Œ€์‹  ๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

์ฒ˜์Œ์—๋Š” // @ts-ignore-file ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ–ˆ์ง€๋งŒ // @ts-ignore๋Š” ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๋” ์ž˜ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ.... typescript ํŒŒ์ผ์—์„œ //@ts-nocheck ๋ฅผ ์ง€์›ํ•˜๋Š” #33383์„ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š” _TypeScript_ ์ปดํŒŒ์ผ๋Ÿฌ ํŒ€์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. (๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ , ์™€์•„์•„์•„!!?!?) - typescript์˜ //@ts-ignore ๋„ ํŒ”์ด ๊ผฌ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„, ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š”... ๋” ์ด์ƒ์˜ ์–ต์ œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋ฅผ... ์ฃผ์ €ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ์ •๋ง๋กœ ๊ทธ๋Ÿฐ ๊ด‘๋ฒ”์œ„ํ•œ ์–ต์ œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๋Š๋‚€๋‹ค๋ฉด ๊ฑฐ๊ธฐ์— ๊ฐ€์„œ ๐Ÿ‘

@weswigham , ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์€ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ์ค„์˜ ์ฝ”๋“œ์— ์ž„์‹œ๋กœ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœํ•˜๊ณ  ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฌธ์ œ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๋™์•ˆ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์ด ์‹ค์ œ๋กœ ๋Ÿฐํƒ€์ž„ ๋ฒ„๊ทธ๋ฅผ ์ผ์œผํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ•˜๋„๋ก ๊ฒฝ๊ณ ๋ฅผ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์šฉ์œผ๋กœ๋งŒ ์ด ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋นŒ๋“œ ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์—๋Š” ์—ฌ์ „ํžˆ "์ถ”๊ฐ€ ํ”ผ๋“œ๋ฐฑ ๋Œ€๊ธฐ ์ค‘"์ด๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ๋ถ™์–ด ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋” ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ฒ˜ ๋ฐฉํ–ฅ์„ ๋น ๋ฅด๊ฒŒ ํ”„๋กœํ† ํƒ€์ดํ•‘ํ•  ๋•Œ TypeScript์˜ ์•ˆ๋‚ด์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹คํ—˜ํ•˜๋Š” ๋™์•ˆ ์ผ์‹œ์ ์œผ๋กœ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํŒŒ์ผ์˜ ์œ ํ˜• ์˜ค๋ฅ˜๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ฐ ํŒŒ์ผ์˜ ์ƒ๋‹จ์— ์ผ์ข…์˜ @ts-ignore- ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ถฉ๋ถ„ํžˆ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” @kumar303 ์˜ ํ•„์š”์„ฑ์„ ๋‘ ๋ฒˆ์งธ๋กœ: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ์ฃผ์–ด์ง„ ๋ธ”๋ก/ํŒŒ์ผ์— ๋Œ€ํ•œ ์ผ๋ถ€ ๊ฒ€์‚ฌ๋ฅผ ๋„๋Š” ๊ฒƒ์ด ์œ ์ตํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ๋‹ค๋ฃฐ ์ฃผ์žฅ์ด ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@weswigham ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋ž˜๊ทธ ๋’ค์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋ž˜๊ทธ ๋’ค์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„์š” ์—†์Œ - 3.7 ๋ฒ ํƒ€ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

re: https://github.com/microsoft/TypeScript/pull/33383 : @weswigham ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์„œ ๊ฐ•๋ ฅํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ํŒŒ์ผ์—์„œ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ @ts-nocheck ์ œ๊ฑฐ๋ฅผ ์žŠ์—ˆ์„ ๋•Œ ์‹คํŒจํ•˜๋Š” ๋ฆฐํŠธ ๊ทœ์น™๋„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

.jsx ํŒŒ์ผ์—์„œ๋Š” ์ •์  graphQL ์ฟผ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•˜์ง€๋งŒ .tsx ํŒŒ์ผ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” gatsby์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ œ์•ˆ์ด ๋” ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (์—ฌ๊ธฐ https://github.com/AdamLeBlanc/gatsby-plugin-ts-loader/issues/5์—์„œ ๋ฐœํ–‰)

์ด๋ด!
์ œ์•ˆ๋œ ์†”๋ฃจ์…˜์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

// @ts-ignore-start
// @ts-๋ฌด์‹œ ์ข…๋ฃŒ

๋งค์šฐ ์œ ์ตํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

3.7์—์„œ ์ „์ฒด ํŒŒ์ผ์˜ ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ์–ต์ œํ•˜๊ธฐ ์œ„ํ•ด //@ts-nocheck ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค„ ์ˆ˜์ค€ ๋ฐ ํŒŒ์ผ ์ˆ˜์ค€ ์–ต์ œ๊ฐ€ ํฐ ์†Œ๋ž€ ์—†์ด _๋Œ€๋ถ€๋ถ„์˜_ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฒดํฌ๋ฅผ ํ•ด์ œํ•ด์•ผ ํ•˜๋Š” ์ฒดํฌ๋œ ํŒŒ์ผ ๋‚ด์— ์ถฉ๋ถ„ํžˆ ํฐ ๋ธ”๋ก์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ์ „์ฒด ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฒดํฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜, ๋ถˆ์พŒํ•œ ๊ฒฝ์šฐ ์ฒดํฌ๋˜์ง€ ์•Š์€ ์ฒญํฌ๋ฅผ ์ž์ฒด ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฒดํฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜, ์‹คํŒจํ•˜๋ฉด, ์‹ค์ œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฐ ์ค„์„ ์–ต์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ts-ignore ๋Š” ๋‹จ์ผ ๋ฌธ์ œ๋ฅผ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋Š” ๋ฐ˜๋ฉด ts-nocheck ๋Š” ๋‹จ์ผ ํŒŒ์ผ์„ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ๊ธฐ๋ฐ˜ ์–ต์ œ๋Š” ์‹ค์ œ๋กœ ์–ด๋–ค ์‹์œผ๋กœ๋“  ํŠน์ • ๋‹จ์œ„์— ๋งคํ•‘๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์–ด๋–ป๊ฒŒ ๋“  ๋” ๋‚˜๋น  ๋ณด์ž…๋‹ˆ๋‹ค (๋‹จ์ผ ๋ฌธ์ œ ๋˜๋Š” ์–ต์ œํ•˜๋Š” ๊ทผ๋ณธ ์›์ธ์— ๋งคํ•‘ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—). ์ ์–ด๋„ ์˜ค๋ฅ˜ ์ฝ”๋“œ ํŠน์ • ์–ต์ œ๊ฐ€ ์—†์œผ๋ฉด ๋ฒ”์œ„ ๊ธฐ๋ฐ˜ ์–ต์ œ๊ฐ€ ํŠนํžˆ ํŽธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ ์–ด๋„ ํŒŒ์ผ ์ƒ๋‹จ์— ๋‹จ์ผ ์–ต์ œ( //@ts-nocheck File is a legacy untyped UMD module concatenated into the build - declarations are pulled from node_modules, so errors here are hopefully meaningless ) ๋˜๋Š” ๊ฐœ๋ณ„ ๋‚˜์œ ๊ฒƒ(tm)์— ๋Œ€ํ•œ ๊ฐœ๋ณ„ ์–ต์ œ( //@ts-ignore The TS compiler doesn't support the assignment on the next line because we never declare it, but we provide this for legacy compat )๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ‰์ƒ ๋™์•ˆ "์—ฌ๋Ÿฌ ์—ฐ์†์ ์ธ ์“ฐ๊ธฐ ๊ธฐ๋ณธ์ ์œผ๋กœ TypeScript์—์„œ ์–ต์ œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €๋Š” ์ด์— ๋Œ€ํ•ด _์ œ๋กœ_ ๊ณต๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜• ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ ์ด๋ฅผ ์บ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ž˜์„œ any , ์บ์ŠคํŠธ ๋ฐ ์•ฝ์‹ ๋ชจ๋“ˆ ์„ ์–ธ์ด ์กด์žฌํ•จ). ๊ตฌ๋ฌธ ๋ฌธ์ œ๋ผ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋”์ฐํ•˜๊ณ  ์–ด์จŒ๋“  ๊นจ์งˆ ๊ฒƒ์ด๋ฏ€๋กœ ์–ต์ œ๋Š” ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์–ต์ œ ์ž‘์—…์€ ๊ตฌ๋ฌธ ๋ถ„์„ ์˜ค๋ฅ˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ).

//@ts-nocheck ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ฝ”๋“œ ๋ธ”๋ก ๊ฒ€์‚ฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

const $element = document.createElement('iframe')
$element.loading = 'lazy' // Property 'loading' does not exist on type 'HTMLIFrameElement'.

// @ts-nocheck

ํฅ๋ฏธ๋กœ์šด ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋„ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น๋ฌธ์„ DDL๋กœ ์ปดํŒŒ์ผํ•˜๋Š” Typescript๋กœ ORM์„ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜ ์†Œ์œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Where ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋ฒ”์œ„ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

.entities
.include('parent')
.where(m => m.id === this.id, { id: this.entityId })
.toList()

์ด๊ฒƒ์€ ๋‹จ์ˆœํžˆ Property 'id' does not exist on type 'xxx' ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ts-ignore-start ๋กœ ๋ž˜ํ•‘ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

// @ts-ignore-start
.where(m => m.id === this.id, { id: this.entityId })
// @ts-ignore-end

๊ทธ๋Ÿฌ๋‚˜ ํ˜•์‹์ด ์ง€์ •๋˜๊ณ  ์ค„ ๋ฐ”๊ฟˆ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด:

// @ts-ignore-start
.where(m => m.id === this.id || m.id === this.id2, {
  id: this.entityId,
  id2: this.entity2Id
})
// @ts-ignore-end

๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹จ์ˆœํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ์œ ํ˜• ์ˆ˜์ค€ ์˜ค๋ฅ˜์˜ ์ข…๋ฅ˜์ž…๋‹ˆ๋‹ค. ์ •๋ง๋กœ ๊ทธ๊ฒƒ์„ ์–ต์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•ก์„ธ์Šค์— ๋Œ€ํ•ด as any ์บ์ŠคํŠธ(๋˜๋Š” jsdoc์—์„œ๋Š” /** <strong i="8">@type</strong> {any} */(expr) )๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

//@ts-nocheck ๋Š” ๋‚ด ts angular ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ //@ts-ignore ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๋ฅผ ์œ„ํ•œ ์ด๋ฒˆ ํ˜ธ๋Š” 2017๋…„์— ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 2017๋…„! ์™€...

3๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ ํ•ด๊ฒฐ์ฑ…์ด ์—†์Šต๋‹ˆ๋‹ค. JavaScript ๊ฐœ๋ฐœ์ž๊ฐ€ typescript๋กœ ์ ํ”„ํ•˜๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ๋†€๋ผ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

// @ts-ignore-start
// @ts-ignore-end

๋‹ค์Œ๊ณผ ๊ฒฐํ•ฉ ๊ฐ€๋Šฅ: #19139

// @ts-ignore-start Property_0_does_not_exist_on_type_1
// @ts-ignore-end (possible include the error type again so you can turn be more specific of where you want to ignore some errors

@marianturchyn ์ด๊ฒƒ์€ tslint๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ตฌํ˜„ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

// @ts-nocheck
ํ˜„์žฌ ์œ ์ผํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค :(

์—ฌ๊ธฐ์—์„œ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ํ•  ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€...

์ €๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ์ œ์–ด ํ๋ฆ„๊ณผ ์กฐ๊ฑด์„ ํ—ˆ์šฉํ•˜๋Š” ์‚ฌ๋‚ด ๋งˆํฌ์—… ์–ธ์–ด์—์„œ ๋งŽ์€ TypeScript ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ƒ์„ฑ ๋™์ž‘์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋™์•ˆ ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ์— ์ „๋‹ฌ๋˜๋Š” ์ž…๋ ฅ์€ ์ œ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Œ).

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ƒ์„ฑ๋œ ์ฝ”๋“œ์—๋Š” ์‰ฝ๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์— ๋Œ€ํ•ด ๊ฐ’์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ค‘์ฒฉ ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ TS2367์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ธ”๋ก ๋‚ด๋ถ€์— ๋‹ค๋ฅธ ์—ด๊ฑฐํ˜• ์ƒ์ˆ˜์— ๋Œ€ํ•œ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๋˜ ๋‹ค๋ฅธ ๊ฒ€์‚ฌ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

if (foo === MyEnum.ONE) {
  const bar = (foo === MyEnum.TWO ? "two" : "one");
}

์†์œผ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ํŒจํ„ด์„ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•˜๊ณ  ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ ์ƒ์„ฑ์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ž…๋ ฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋‚ด ์‚ฌ์šฉ์ž(๊ฐœ๋ฐœ์ž, ์œ ํ˜•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!)์˜ ๋ชซ์ž…๋‹ˆ๋‹ค.

ํ˜•์‹ ๊ฒ€์‚ฌ๋ฅผ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์ง€๋งŒ ์ด ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ฝ”๋“œ ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ๋ชจ๋“  ์ฝ”๋“œ ์ƒ์„ฑ ํŒŒ์ผ์— ๋Œ€ํ•ด ์ด ์˜ค๋ฅ˜ ํ•˜๋‚˜๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์œ ํ˜• ๊ฒ€์‚ฌ๋Š” ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Œ€๋กœ ๋ชจ๋“  ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ๋„๋Š” ๊ฒƒ ์™ธ์—๋Š” ํ•ด๊ฒฐ์ฑ…์ด ์—†์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์‹œ์ ์—์„œ TypeScript์™€ ์ผ๋ฐ˜ JavaScript์—์„œ ๋งŽ์€ ๊ฐ€์น˜๋ฅผ ์–ป์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ง„์‹ฌ์ด์•ผ? ์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ์ด๋ฉฐ TS4์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๐Ÿคฆ๐Ÿฝ

@ivnnv TS 3.9์—์„œ // @ts-expect-error ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

@ndraiman @ts-expect-error ๊ฐœ๋ณ„ ๋ผ์ธ์— ๋Œ€ํ•ด์„œ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ๋ธ”๋ก ์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ "๋ธ”๋ก์„ ๋ฌด์‹œ"ํ•˜๋ ค๋ฉด ๋งŽ์€ ๋ผ์ธ์„ ๋ฐฐ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ํ”ผ๋“œ๋ฐฑ์ž…๋‹ˆ๋‹ค.

๋˜ ๋ฌด์—‡์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด์— ๋Œ€ํ•œ ๊ฐ€์žฅ ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๋‹จ์ผ ์œ ํ˜•์— any ๋ฅผ ์“ฐ๋Š” ๊ฒƒ์˜ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋ฏธํ•™์— ๋Œ€ํ•ด ๋™์ •์‹ฌ์ด ์—†์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ(๋ถ„๋ช…ํžˆ ๊ธฐ๋ถ„๊ณผ ์ƒ์‚ฐ์„ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์ž…๋‹ˆ๋‹ค), ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋Œ€์™€ ์ผ์น˜ํ•˜๋Š” ๋Œ€์•ˆ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ฐ›์•„๋“ค์ด๋Š” ๊ฒƒ์ด ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฌํ•ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋„ˆ๋ฌด ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๊ณ  ์ฝ”๋“œ ํฌํŒ…๊ณผ ๊ฐ™์€ ์ผ์ƒ์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํ๋ฆ„ ์ƒํƒœ๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
๋ฌด์‹œ๋œ ์ฝ”๋“œ ๋ธ”๋ก์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ณ  ๋Œ€์‹  any ์บ์ŠคํŠธ๋กœ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋ฒ„๋ ค์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์งœ์ฆ๋‚˜๊ณ  ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ข…์ข… ๊ฐ€๋…์„ฑ์— ํ•ด๋กœ์šด ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค(์ ์ ˆํ•œ ์œ ํ˜•์ด ์žˆ์„ ๋•Œ๊นŒ์ง€). ๊ณ„์†ํ•ด์„œ ์ƒˆ๋กœ์šด ์ฃผ์„์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ์ฃผ์˜๋ฅผ ์‚ฐ๋งŒํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐ ํƒ๋‹‰ํ•˜๋Š” ๊ฒƒ์€ _๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฝ”๋“œ ๋ธ”๋ก์„ ๋ฌด์‹œํ•˜๋Š” ์ด์ ์„ ๋ณด์ง€ ๋ชปํ•œ๋‹ค๋Š” ์ด์œ ๋กœ _ ์ œ ๊ด€์ ์—์„œ๋Š” ์˜ณ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

ํ•˜๋‚˜๋Š” JS์—์„œ TS๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ด์‹ํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋Š” ํƒ€์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์‹๋œ ํ”„๋กœ์ ํŠธ์—์„œ ๋”ฐ๋ฅด๋Š” ๊ตฌ๋ฌธ ๋ฐ ๊ทœ์น™์€ ์˜ˆ๋ฅผ ๋“ค์–ด es2015์™€ ๊ฐ™์ด ์ด์ „์ด๊ฑฐ๋‚˜ ๋” ๋ช…ํ™•ํ•œ ๊ตฌ๋ฌธ๊ณผ ๋” ์ ์€ ์ฝ”๋“œ๋ฅผ ์œ„ํ•ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ด์‹ํ•  ๋•Œ ์ผ๋ถ€ ์ฝ”๋“œ๋Š” TypeScript๋กœ ์ด์‹ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ•„์—ฐ์ ์œผ๋กœ ๋” ๋งŽ์€ ์ปจํ…์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ์œ ํ˜•์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•œ๋™์•ˆ ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š” ์ž„์˜์˜ ๋™์ž‘์„ ๊ฐ€์ง„ ๋ถ€์šธ ๋ฐ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐ˜์ฏค ์ƒ๊ฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ๋™์•ˆ ํŒŒ์ผ์˜ ๊ธฐ๋Šฅ์ด๋‚˜ ์ฝ”๋“œ ๋ธ”๋ก์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์ •๋ง ๋ฉ‹์ง„ ์ผ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ธ”๋ก์„ ๋ฌด์‹œํ•˜๋ฉด ์ž์‹ ์ด ์•Œ๊ณ  ์žˆ๋Š” ์˜์—ญ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ณ  ๋‚˜์ค‘์— ์‚ฌ์šฉํ•  ํŠน์ • ๋ถ€๋ถ„์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript๋ฅผ TypeScript๋กœ ์ด์‹ํ•ด์•ผ ํ•  ๋•Œ์˜ ๋‚ด ์›Œํฌํ”Œ๋กœ(์ฝ”๋“œ๋Š” ํ•˜์œ„ ์ˆ˜์ค€์ž„):

  1. .js์—์„œ .ts ํŒŒ์ผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  2. TS๊ฐ€ ์šฉ๋„๋ณ„๋กœ ๋ชจ๋“  ์œ ํ˜•์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
  3. ์‚ฌ์šฉ๋ฒ•์—์„œ ์œ ํ˜•์„ ์ˆ˜๋™์œผ๋กœ ์ดํ•ด
  4. ์˜ค๋ฅ˜๊ฐ€ ๋‚ด ์กด์žฌ์˜ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ž„์„ ๊นจ๋‹ฌ์•„
  5. ์˜ค๋ฅ˜๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ํŒŒ์ผ์˜ ์ค„ ์ˆ˜๋ฅผ ๋•Œ๋•Œ๋กœ x3 ESLlint + TS๋กœ ํ–ฅ์ƒ์‹œํ‚ค์‹ญ์‹œ์˜ค(๋งŽ์„์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๊นŒ?)
  6. ๋‚˜๋จธ์ง€ ํŒŒ์ผ์„ ์‹ ์ค‘ํ•˜๊ฒŒ ํŽธ์ง‘ํ•˜๊ณ  ๋” ๋งŽ์€ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ์ƒ๋‹จ์— // @ts-check ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

๋ธ”๋ก์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด:

  1. .js์—์„œ .ts๋กœ ์ฝ”๋“œ ๋ณต์‚ฌ
  2. TS๊ฐ€ ์šฉ๋„๋ณ„๋กœ ๋ชจ๋“  ์œ ํ˜•์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธ
  3. ์‚ฌ์šฉ๋ฒ•์—์„œ ์œ ํ˜•์„ ์ˆ˜๋™์œผ๋กœ ์ดํ•ด
  4. // @ts-ignore-enable ... // @ts-ignore-disable ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ ๋ฐ ๋ฒˆ๊ฑฐ๋กœ์šด ์ฝ”๋“œ ๋ธ”๋ก
  5. ๋ธ”๋ก์— ์ ‘๊ทผํ•˜์—ฌ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์ฃผ์„ ํ•ด์ œ

๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ด๋Š” ๊ฒƒ์„ ์Šค์Šค๋กœ ๊ฒฐ์ •ํ•˜์‹ญ์‹œ์˜ค. ๋” ๋งŽ์€ ESLint ๊ทœ์น™์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— JS๋ฅผ ์ด์‹ํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ํ•ญ๋ชฉ์„ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ESLint์—์„œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํ•˜๊ณ  TypeScript์—์„œ /* eslint:disable */ ... /* eslint:enable */ ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ถ”์‹ : ์ด ๋Œ“๊ธ€์„ ํ™•์ธํ–ˆ์„ ๋•Œ ์ €์™€ ๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด 2017๋…„๋ถ€ํ„ฐ ์ฐพ๋˜ ๊ฒฝํ—˜์„ ์–ป๊ธฐ ์œ„ํ•ด 20๋ถ„ ์ด์ƒ์„ ๋ณด๋ƒˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ณง 3๋…„์ด ์ง€๋‚œ ๊ณต๊ฐœ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผํ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

@wswigham @RyanCavanaugh

์•Œ๋ฆผ:+1:

๋ง์•„๋“ค์„ ์ฃผ๋Š” ๋Œ€๊ฐ€๋กœ

@agusterodin ๋‹น์‹ ์˜ ํฌ์ƒ์ด ์•…๋‹น๋“ค์˜ ๋ˆˆ๊ธธ์„ ๋ˆ๋‹ค.....

์ข‹์•„, ๋‚˜๋Š” ๋‹จ์ง€ ๊ฐ„๋‹จํ•œ PR์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์‹ค์ œ๋กœ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค :)

๊ทธ๋Ÿฌ๋‚˜ ๊ฐœ์ธ์ ์œผ๋กœ TS ํŒ€์˜ ์˜๊ฒฌ์— ์ ๊ทน ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์•…์˜์ ์ด๋ฏ€๋กœ @ts-ignore-enable (๋˜๋Š” @ts-ignore-start ์‚ฌ์šฉํ•˜์ง€ ๋ง๊ณ  ํ•ญ์ƒ @ts-ignore ์‚ฌ์šฉ์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. , ๋ฌด์—‡์ด๋“ ).
ํ•˜์ง€๋งŒ ๊ฐ€๋”์€ ์†๋‹ด์— drinking posion to satisfie thirst ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์œ ์„ ํƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.


ํŽธ์ง‘: ์„ค๋ช… ๋ฐ ์˜ˆ์ œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
์ด PR ts-ignore-enable ๋ฐ ts-ignore-disable ๋‘ ๊ฐœ์˜ ์ง€์‹œ๋ฌธ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  1. ts-ignore-enable๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ๋ชจ๋‘ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
...   <-- this is normal
// @ts-ignore-enable
XXX    <-- this is ignored
...    <-- this is ignored
  1. ๋™์ผํ•œ ์ง€์‹œ๋ฌธ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•œ ๋ฒˆ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
// @ts-ignore-enable
XXX  <-- this is ignored  
// @ts-ignore-enable       <-- you could remove this line.
YYY   <-- this is ignored
// @ts-ignore-disable
ZZZ   <-- this is normal
// @ts-ignore-disable      <-- you could remove this line.
  1. // @ts-ignore-disable ๋Š” ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  2. @ts-expect-error ๋Š” ๋ฌด์‹œ๋œ ์˜์—ญ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

// @ts-ignore-enable
XXX  <-- this is ignored
// @ts-expect-error       <-- No error message. whatever next line has error or not.
YYY   <-- this is ignored
  1. ์ง€์—ญ ๋ ˆ์ด๋ธ”์ด ์—†์œผ๋ฉฐ ์ฃผ์„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
// @ts-ignore-enable A
XXX  <-- this is ignored  
// @ts-ignore-enable   B    <-- you could remove this line.
YYY   <-- this is ignored 
// @ts-ignore-disable B
ZZZ   <-- this is normal
// @ts-ignore-disable A     <-- you could remove this line.

์™„๋ฒฝํ•œ ์„ธ์ƒ์—์„œ๋Š” ์œ ํ˜• ์•ˆ์ „์„ฑ์„ ๋ฌด์‹œํ•  ํ•„์š”๊ฐ€ ์—†๊ฒ ์ฃ ? :๋•€_๋ฏธ์†Œ:
์˜ˆ๋ฅผ ๋“ค์–ด, ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์ž…๋ ฅํ•˜์ง€ ์•Š์€ ๊ฐ€๋” SO ๋‹ต๋ณ€๊ณผ ๊ฐ™์€ ํ™˜์ƒ์ ์ธ ์ž‘์—…์„ ๋ณต์‚ฌํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ๋‚ด ์„ค์ •์„ ๋”ฐ๋ฅด๋Š” ๋‚ด ์œ ํ˜• ์•ˆ์ „ ์ฝ”๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋งค์šฐ ์—„๊ฒฉํ•œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์ข…์ข… ๊ทธ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋‚˜ ์ผ๋ถ€ ๋…ผ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ฝ”๋“œ ๋ธ”๋ก์„ ๊ณ„์† ๋ฌด์‹œํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ง์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ธ”๋ก์„ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์€ ํŽธ๋ฆฌํ•˜๋ฉฐ, ๋ธ”๋ก์˜ ๋ชจ๋“  ๋ผ์ธ์„ @ts-ignore ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ฐ์•ˆํ•  ๋•Œ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

I'll just ignore this because it's easier ๋กœ ๊ฐ€๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ด๊ฒƒ์ด ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ์˜ํ–ฅ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณด๊ธฐ์— drink poison to satisfy their thirst ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๋ธ”๋ก ๋ฒ”์œ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ์ด๋ฏธ @ts-ignore ๋กœ ๋… ํ•œ ๋ฐฉ์šธ์„ ๋งˆ์‹œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ .ts @ts-nocheck ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ $ .ts @ts-check ๋ฅผ ํ—ˆ์šฉํ•˜์—ฌ ์œ ํ˜• ๊ฒ€์‚ฌ๊ธฐ๋ฅผ ์ผœ๊ฑฐ๋‚˜ ๋Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import fs from 'fs'

fs.readFileSync(32423) // type checking

// @ts-nocheck
fs.foobarbaz() // type checking is off
fs.__randomThing()

// @ts-check
fs.readFileSync(123) // now type checking again

์ด๊ฒƒ์€ "์ฝ”๋“œ ๋ธ”๋ก"์ด ๋ฌด์—‡์ธ์ง€ ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. -์—์„œ ๋ชจ๋“  ํ–‰๊นŒ์ง€ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ์‹œ์ž‘ ๋ฐ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ ๋‚ด๊ฐ€ ์ž˜๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ์‚ฌํ•ญ์€ https://github.com/microsoft/TypeScript/pull/40267#issuecomment -713840095๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

styled-components ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์„ TypeScript๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๊ณ  ํ•  ๋•Œ (์–ด๋–ค ์ด์œ ๋กœ) ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด ์œ„์— @ts-ignore ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ignore-block์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌด์‹œํ•˜๋ ค๊ณ  ํ–ˆ๋˜ TS ์˜ค๋ฅ˜์˜ ์˜ˆ:

import styled from "styled-components";
import { Button } from "...";

// @ts-ignore here does not work
const StyledNavBar = styled.div`
  ${Button} {
    margin: auto 0;
  }
`;

์ถ”๊ฐ€ ์ฐธ๊ณ  ์‚ฌํ•ญ: TS ํ”„๋กœ์ ํŠธ์—์„œ ์บ์ŠคํŠธํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ชจ๋“  ์œ ํ˜•์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ถ”์ฒœ์€?

@weswigham ๋ฏธํ•™์˜ ๋งฅ๋ฝ์—์„œ ํ๋ฆ„ ์ƒํƒœ ๋ฐ ์ƒ์‚ฐ์„ฑ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‹น์‹ ์€ ํ”ผ๋ˆˆ๋ฌผ์— ๋Œ€ํ•ด ๋™์ •์‹ฌ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ์‚ฐ์„ฑ, ์ฝ”๋“œ ์ด์‹ ๋ฐ ๋‚ด๊ฐ€ ์„ค๋ช…ํ•œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ์˜๊ฒฌ์„ ๊ณ ๋ คํ•œ ํ›„์—๋„ ๋” ์ƒ์‚ฐ์ ์ด๋ผ๋Š” ๋งฅ๋ฝ์—์„œ ์—ฌ์ „ํžˆ ์–ด๋–ค ์ด์ ๋„ _์ „ํ˜€__ ๋Š๋ผ์ง€ ๋ชปํ•ฉ๋‹ˆ๊นŒ? ๋˜ํ•œ ๋ธ”๋ก ๋ฒ”์œ„๋ฅผ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋Š” ์‹ค์ œ ์ƒํ™ฉ์— ๋Œ€ํ•ด์„œ๋„ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ๊ธฐ๋Šฅ์ด ESLint ๋ฐ ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ธฐ๋Šฅ๊ณผ ์–ด๋–ป๊ฒŒ ๋น„๊ต๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ค‘๋‹จ์ด ์ ์„์ˆ˜๋ก ์ƒ์‚ฐ์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ํšจ์œจ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค๋Š” ๊ฒƒ์ด ๊ณผํ•™์ ์œผ๋กœ ์ž…์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ๋ธ”๋ก ๋ฒ”์œ„ ๋ฌด์‹œ๋Š” ์ฝ”๋“œ๋ฅผ ์ด์‹ํ•  ๋•Œ ๋” ์ ์€ ์ค‘๋‹จ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. TS ํŒ€์€ "๊ธฐ๋ณธ์ ์œผ๋กœ TypeScript์—์„œ ์–ต์ œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค."๋ผ๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ซ์ง€ ๋ชปํ•ฉ๋‹ˆ๊นŒ? ๋Š” ์‚ด์•„ ์žˆ๊ณ  ์ˆจ์‰ฌ๋Š” TypeScript์— ๊ธฐ๋ฐ˜ํ•œ ์˜๊ฒฌ์ด๋ฉฐ ํ˜„์‹ค ์„ธ๊ณ„์—์„œ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋” ๋งŽ์€ ์œ ํ˜• ์•ˆ์ „์„ฑ ๋ฐ ๊ธฐํƒ€ ๋ฆฐํŠธ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๋Œ€๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฒ ์ด์Šค๋กœ ์ด์‹ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๊ฒฌ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ๋Š” ํŒŒ์ผ์ด๋‚˜ ์ค„์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐฉ๊ธˆ ๊ฐ€์ ธ์˜จ ์ฝ”๋“œ ๋ธ”๋ก์€ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณด๊ธฐ์—” ํ˜„์‹ค์„ ๋ฌด์‹œํ•˜๊ณ  ์œ ํ† ํ”ผ์•„๋ฅผ ํ–ฅํ•ด ๊ฐ€๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. @sandersn ๋‹น์‹ ์€ ๋‚ด ์š”์ ์„ ๋‹ค๋ฃจ์ง€ ์•Š์•˜๊ณ  ์‚ฌ๊ฑด์˜ ์ƒˆ๋กœ์šด ํ† ๋ก ์— ๋Œ€ํ•ด ์ด์ „ ๋‹ต๋ณ€์„ ๋ณด๋ฅ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํŒ€์—์„œ ๋‹ฌ๋ฆฌ ๊ฒฐ์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ตฌํ˜„ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

ํŒ€์€ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ฑฐ๋‚˜ ๋ช…ํ™•ํ•˜๊ฒŒ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ๋ฆผ๋ณด ์ƒํƒœ๋กœ ๋‘๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ํ•„์š”๋กœ ํ•˜๋Š” ์™„๊ฒฐ์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์—†์–ด ์œ ๊ฐ์ด์ง€๋งŒ ํ˜„์‹ค์€ "์•„๋งˆ๋„ ๋‚˜์ค‘์—"๋ผ๋Š” ๋Œ€๋‹ต์ด ๋‹น์‹ ์ด ํ•จ๊ป˜ ์‚ด์•„๊ฐ€๋Š” ๋ฒ•์„ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ๊ธฐ๋Šฅ์€ ๋‚ด์ผ ์ œํ’ˆ์— ์„œ๋‘๋ฅผ ์ˆ˜ ์—†์œผ๋ฉฐ, ์šฐ๋ฆฌ์˜ ์„ค๊ณ„ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์†ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ธ์ฒด ๊ณตํ•™์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ œํ’ˆ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๋†“๊ณ  ๊ฒฝ์Ÿํ•˜๋Š” ์ˆ˜์ฒœ ๊ฐœ์˜ ์ œ์•ˆ์ด ํ˜„์žฌ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์šฉํ•˜๊ณ  ์•ˆ์ •์ ์ด๋ฉฐ ์ง„๋ณด์ ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ํ”ผ๋“œ๋ฐฑ, ํ˜„์žฌ ์†”๋ฃจ์…˜ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์˜ ์ƒํƒœ, ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์šฐ์„ธ, ๋„๊ตฌ ๋ฐ ๊ธฐํƒ€ ์ˆ˜๋ฐฑ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์ง€ ์•Š์€ ๊ฒƒ์ด ๋‚˜์ค‘์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด "์•„๋งˆ๋„ ๋‚˜์ค‘์—"์˜ ์„ฑ๊ฒฉ์ด๋ฉฐ ์ด๊ฒƒ์ด ์ด ์ œ์•ˆ์ด ์–ด๋””์— ์žˆ๋Š”์ง€๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์—ฌ๊ธฐ์—์„œ ๊ฒฐ์ •์€ ํ”ผ๋“œ๋ฐฑ์„ ๊ณ„์† ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋‹ค์Œ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋ณด๋‹ค ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„๋กœ ์ด ๊ธฐ๋Šฅ์„ ํ•„์š”๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋ฌด์—‡์„ ๊ฒช๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์˜ ์–ด์กฐ๋Š” ์†”์งํžˆ ์ ๋Œ€์ ์ธ ๊ฒฝํ–ฅ์ด ์žˆ๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ๋งํ•˜๊ณ  ์ตœํ›„ ํ†ต์ฒฉ์„ ํ–ฅํ•ด ๋ฐ€์–ด๋ถ™์ด๋Š” ๊ฒƒ์€ ์ด๊ฒƒ์ด ๋Œ€์•ˆ์— ๋น„ํ•ด ๋ณต์žก์„ฑ์„ ๋Šฅ๊ฐ€ํ•˜๋Š” ๊ฐ€์น˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ฑด์„ค์ ์ธ ๋Œ€ํ™”์— ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ตœํ›„ํ†ต์ฒฉ์„ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” PR์„ ํ–ฅํ•œ ํ™œ๋™์„ ๋ณด๊ณ  ๊ฝค ์งœ์ฆ์ด ๋‚ฌ์ง€๋งŒ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ฌด ๊ฒƒ๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ด์ „ ์˜๊ฒฌ์ด ๊ฑด์„ค์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์ ์„ ์ธ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ  ํ•ด๊ฒฐ์— ๋” ๊ฐ€๊นŒ์›Œ์ง€๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋‹ค๋ฅธ ํ”ผ๋“œ๋ฐฑ์ด ๋ฌด์—‡์ธ์ง€ ๋ฌผ์—ˆ์ง€๋งŒ ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์•„๋ฌด๋ฆฌ ์„ฑ๊ฐ€์‹œ๋”๋ผ๋„ ๋‚ด ๋‹ค์†Œ ๊ฑด์„ค์ ์ด์ง€ ์•Š์€ ์˜๊ฒฌ์€ ๋‚ด๊ฐ€ ํŒ€์œผ๋กœ๋ถ€ํ„ฐ _์ผ๋ถ€__ ์‘๋‹ต์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ํ•ด์•ผ ํ–ˆ๋˜ ์ผ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ช‡ ๋…„์ด ์ง€๋‚œ 700๊ฑด์ด ๋„˜๋Š” ๊ธ์ •์ ์ธ ๋ฐ˜์‘์ด ์žˆ๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์‹ค์ œ ์ง„ํ–‰์€ ์•„์ง ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋” ๋นจ๋ผ์ ธ์•ผ ํ•œ๋‹ค๊ณ ๋Š” ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ, ๋ฉค๋ฒ„๋“ค์˜ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒ€์ด ์ด ๊ธฐ๋Šฅ์„ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๋ชจ๋“  ๊ฒƒ์„ ์™„์ „ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ํ•˜๋ ค๋Š” ๊ฒƒ์€ ๊ทธ๊ฒŒ ์•„๋‹™๋‹ˆ๋‹ค. ๋Œ€ํ™”๋ฅผ ์ข€ ํ•˜๊ณ  ์‹ถ์€๋ฐ ๋ฌด์‹œ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ”ผ๋“œ๋ฐฑ์ด ๊ณ ๋ ค๋˜๊ณ  ๊ทธ ์„ฑ๊ฒฉ์„ ๊ฐ์•ˆํ•  ๋•Œ ์‘๋‹ต๋˜์—ˆ์Œ์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์งง์€ ์‹œ๊ฐ„์— ํ™œ์„ฑํ™”๋œ ํ™œ์„ฑ PR์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๊ธฐ๋Šฅ ์ง‘ํ•ฉ์— ํฐ ํ˜ผ๋ž€์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ชจ๋“  ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ ์‚ฌ๋žŒ๋“ค์€ ์ฐจ๋‹จ ๋ฌด์‹œ ๊ธฐ๋Šฅ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ณ„์† ๊ธ์ •์ ์œผ๋กœ ๋ฐ˜์‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ฌผ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํŒ€์—์„œ ์ œ๊ธฐ๋œ ๋ช‡ ๊ฐ€์ง€ ์š”์ ์— ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋™์˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด์— ๋Œ€ํ•ด ๋ฐ˜๋Œ€ํ•˜์—ฌ PR์„ ํ–ˆ๊ณ  '๋งˆ์Œ์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ํ•œ' ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๋€Œ์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ์˜๊ฒฌ์ด ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์—์„œ ๋‚ด ์ขŒ์ ˆ๊ฐ์ด ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. ๋‚˜์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํ”ผ๋“œ๋ฐฑ์„ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜๊ณ  ํŒ€ ๊ตฌ์„ฑ์›์˜ ๊ฒฐ์ •์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ค€๋น„๋œ ๊ธฐ๋Šฅ์„ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ _ํ•ฉ์˜์— ๋”ฐ๋ผ_ ๋‹ฌ๋ฆฌ ๊ฒฐ์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋” ๋งŽ์€ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๊ทธ๋ž˜์„œ ์ œ๊ฐ€ ์ตœํ›„ํ†ต์ฒฉ์„ ์ž˜๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” @weswigham ์˜ ์š”์ ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ฃผ์žฅ์„ ํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์ œ๊ณตํ–ˆ์œผ๋ฉฐ ์†”์งํžˆ ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์›€์ด ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ ๋ˆˆ์— ๋„๊ฒŒ ํ™”๋ฅผ ๋‚ด๊ณ  ๊ฑด์„ค์ ์ด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ๋ฟ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ์–ด๋–ป๊ฒŒ ์ด๋™ํ•ฉ๋‹ˆ๊นŒ? ํŒ€์€ ์–ด๋–ค ํ”ผ๋“œ๋ฐฑ์„ ์›ํ• ๊นŒ์š”? "์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ํ”ผ๋“œ๋ฐฑ, ํ˜„์žฌ ์†”๋ฃจ์…˜ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์˜ ์ƒํƒœ, ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ์šฐ์„ธํ•จ, ๋„๊ตฌ ๋ฐ ๊ธฐํƒ€ ์ˆ˜๋ฐฑ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค." ๋’ค์— ์ˆจ๊ฒจ์ง„ ๊ฐœ์ธ์ ์ธ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ํŒ€์—์„œ _์ „ํ˜€_ ์‘๋‹ตํ•˜์ง€ ์•Š๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ฃผ์ œ์—์„œ ์‚ฌ๋žŒ๋“ค์˜ ์˜๊ฒฌ์„ ๋นผ๋ฉด ์ด๊ฒƒ์ด ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์œผ๋ฉฐ ์ฃผ์žฅ์ด ์ œ๊ธฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ํ•„์š”ํ•œ ๊ฒƒ์€ ํŒ€์ด ๊ฒฐ์ •/๋Œ€์‘์„ ํ•˜๊ณ (์•„๋ฌด๊ฒƒ๋„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋จ) ๊ณต๊ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ํ•„์š”ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด TypeScript์˜ _๋ชจ๋“ _ ๊ธฐ๋Šฅ์ด๋‚˜ ๋ฌธ์ œ, ํŠนํžˆ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์ด๋Š” ๋ฐ ๋ฌด์—‡์ด ๋„์›€์ด ๋˜๋Š”์ง€, ๋˜๋Š” ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

์—ฌ๋Ÿฌ ์ค„( @ts-ignore-start+@ts-ignore-end ) ๋˜๋Š” ์ธ๋ผ์ธ(์˜ˆ /* @ts-ignore */ ) @ts-ignore ์˜ ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.
ํ™˜๊ฒฝ:

  • "noUnusedParameters": true
  • ESLint require-jsdoc ๊ทœ์น™์„ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ์ฝ”๋“œ(๊ฐ„๋‹จํ•œ ์˜ˆ):
type Data = Record<string, unknown>;
type PrepareSettings = Record<string, unknown>;

/**
 * This is base class that will be inherited.
 */
class SuperClass {
    /**
     * Prepare data for further usage.
     * 
     * <strong i="16">@param</strong> data
     *      Data that should be prepared.
     * <strong i="17">@param</strong> settings
     *      Operation settings.
     */
    prepareData(data: Data, settings: PrepareSettings): Data | undefined {
        return data;
    }

    // Some additional methods...
}

์„ค๋ช…๋œ ์ƒํ™ฉ์— ๋Œ€ํ•ด TypeScript๋Š” 'settings' is declared but its value is never read.(6133) ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์„œ ์ฃผ์„ ๋์— @ts-ignore ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     */   // @ts-ignore
    prepareData(data: Data, settings: PrepareSettings): Data | undefined {

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ํ›„์— ESLint๋Š” Missing JSDoc comment ์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์†”๋ฃจ์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

     */   // @ts-ignore
    prepareData(data: Data, settings: PrepareSettings): Data | undefined {   // eslint-disable-line require-jsdoc

์–ด์ƒ‰ํ•˜๊ณ  ์ถ”ํ•œ ๊ฒƒ.

@RyanCavanaugh @weswigham @sandersn

์ด๊ฒƒ์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ TypeScript ํŒ€๊ณผ ๋” ๋…ผ์˜ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์‚ฌํ•ญ์ž„์„ ์›”๊ฐ„ ์•Œ๋ฆผ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์ง€์›์ด ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ๋ˆ„๋ฝ๋œ ๊ฒƒ์€ ํŒ€์˜ ์‘๋‹ต์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์ƒ๊ฐ์„ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ TypeScript๋ฅผ ๋ฐœ์ „์‹œํ‚ค๋Š” ๊ฒƒ์ด ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ์ด ์ œ์•ˆ์„ ๋” ๋ฐœ์ „์‹œํ‚ค๊ณ  ๋” ์ง์ ‘์ ์ธ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ •๊ธฐ์ ์œผ๋กœ ์ด์™€ ๊ฐ™์€ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒฐ์ •์ด ๋‚ด๋ ค์งˆ ๋•Œ๊นŒ์ง€ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ , ๋Œ“๊ธ€์ด ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋Œ€๋ถ€๋ถ„ !@#์ผ ๋•Œ).

๋ช‡ ๋…„์ด ์ง€๋‚œ ํ›„ ์›๋ž˜ ์ด ๊ธฐ๋Šฅ์ด ์—†๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ์กฐ๊ธˆ ๋‹ค์‹œ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค... @ts-ignore ์˜ ์—„์ฒญ๋‚œ ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์„ ๋•Œ ์ด๋ฏธ ๋ญ”๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์œ ํ˜•์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๋•Œ๋•Œ๋กœ ๊ฝค ๊ฒŒ์œผ๋ฅด๊ณ  ์ „๋ฐ˜์ ์œผ๋กœ ์†๋„๋ฅผ ์›ํ•˜์ง€๋งŒ ํ˜„์žฌ๋Š” ์—ฌ๋Ÿฌ @ts-ignore ๋ฅผ ๋งŽ์€ ์ฝ”๋“œ ๋ฌถ์Œ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ช‡ ๊ฐ€์ง€ ์ ์ ˆํ•œ ์œ ํ˜•์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์˜ ๊ท ํ˜•์ด ๊นจ์ง€๋ฉด ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด @ts-ignore-enable์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‚จ์šฉํ•˜๊ฒŒ ๋˜์–ด ์—ฌ๊ธฐ์ €๊ธฐ์„œ ๋ชจ๋“  ์ž‘์€ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ์ „๋ฐ˜์ ์ธ ํ’ˆ์งˆ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Btw, ์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋งŽ์€ ๐Ÿ‘ ๋ฐ˜์‘์ด ์žˆ์Œ์„ ์•Œ์ง€๋งŒ - ํ›จ์”ฌ ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์นจ๋ฌตํ•˜๋Š” ๋™์•ˆ ์ด ๊ธฐ๋Šฅ ์—†์ด ์™„์ „ํžˆ ๊ดœ์ฐฎ๊ฒŒ ๋Š๋‚„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŽธํ–ฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๋“ค์ด ์—ฌ๊ธฐ์— ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@JerryGreen ๋‚ด ์ด์ „ ์˜๊ฒฌ์„ ์ฐธ์กฐํ•˜์—ฌ ๋˜‘๊ฐ™์€ ๋ง์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์ด๋ฏธ ๋ฌด์‹œ ๊ธฐ๋Šฅ์œผ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. _none_ ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋ฉด์„œ ์•ฝ๊ฐ„์˜ ๋…์„ ๊ตฌํ˜„ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@ts-ignore ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋งŽ์€ ์ฃผ์žฅ์ด ์žˆ์œผ๋ฉฐ, ์ž˜๋ชป๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋ธ”๋ก ๋ฌด์‹œ ๊ธฐ๋Šฅ๋งŒํผ ๋‚˜์œ @ts-ignore ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก ๋ฌด์‹œ๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ๋œ ๋ฐฉํ•ด๊ฐ€ ๋œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์™„์ „ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์—ฌ์ „ํžˆ TypeScript ํŒ€์˜ ์‘๋‹ต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@JerryGreen ๋‚ด ์ด์ „ ์˜๊ฒฌ์„ ์ฐธ์กฐํ•˜์—ฌ ๋˜‘๊ฐ™์€ ๋ง์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ๋žŒ๋“ค์€ ์ด๋ฏธ ๋ฌด์‹œ ๊ธฐ๋Šฅ์œผ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. _none_ ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋ฉด์„œ ์•ฝ๊ฐ„์˜ ๋…์„ ๊ตฌํ˜„ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@ts-ignore ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋งŽ์€ ์ฃผ์žฅ์ด ์žˆ์œผ๋ฉฐ, ์ž˜๋ชป๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋ธ”๋ก ๋ฌด์‹œ ๊ธฐ๋Šฅ๋งŒํผ ๋‚˜์œ @ts-ignore ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก ๋ฌด์‹œ๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ๋œ ๋ฐฉํ•ด๊ฐ€ ๋œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์™„์ „ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์—ฌ์ „ํžˆ TypeScript ํŒ€์˜ ์‘๋‹ต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ถ€ ํŠน์ˆ˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์—ฌ์ „ํžˆ @ TS ๋ฌด์‹œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CDN ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” node_์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์‹œ๋‚˜๋ฆฌ์˜ค์— TS ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

@L-Hknu ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์–ด์จŒ๋“  ESLint์™€ ํ•จ๊ป˜ ๋ฌด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์‹œ ๊ธฐ๋Šฅ์€ ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด์™ธ์˜ ์ปจํ…์ŠคํŠธ์—์„œ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์— ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋ก ๋ฌด์‹œ๊ฐ€ ์—†์–ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ์—ฌ์ „ํžˆ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ์˜คํ”ˆ ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ํƒ€์ดํ•‘์œผ๋กœ ๋ฌธ ์•ˆ์œผ๋กœ ๋ฐœ์„ ๋“ค์—ฌ๋†“์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ธ”๋ก ์ฃผ์„๊ณผ ๋ชจ๋“  ํ–‰ ์ฃผ์„์˜ ๋ฏธํ•™์ด ์–ผ๋งˆ๋‚˜ ๋‹ค๋ฅธ์ง€๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋” ํšจ์œจ์ ์œผ๋กœ ์ „ํ™˜์— ๊ธฐ์—ฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์ด ๊ตฌํ˜„์˜ ๊ฐ€์žฅ ํฐ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” typescript ์ง€์›์ด ์—†๋Š” ํƒ€์‚ฌ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๊ฒƒ์ด๋ฉฐ ์ผ๋ถ€ ์‚ฌ์šฉ์€ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@L-Hknu ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์–ด์จŒ๋“  ESLint์™€ ํ•จ๊ป˜ ๋ฌด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์‹œ ๊ธฐ๋Šฅ์€ ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด์™ธ์˜ ์ปจํ…์ŠคํŠธ์—์„œ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์— ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋ก ๋ฌด์‹œ๊ฐ€ ์—†์–ด์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ์—ฌ์ „ํžˆ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ์˜คํ”ˆ ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ํƒ€์ดํ•‘์œผ๋กœ ๋ฌธ ์•ˆ์œผ๋กœ ๋ฐœ์„ ๋“ค์—ฌ๋†“์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ธ”๋ก ์ฃผ์„๊ณผ ๋ชจ๋“  ํ–‰ ์ฃผ์„์˜ ๋ฏธํ•™์ด ์–ผ๋งˆ๋‚˜ ๋‹ค๋ฅธ์ง€๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋” ํšจ์œจ์ ์œผ๋กœ ์ „ํ™˜์— ๊ธฐ์—ฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

๋‹ค ๋œ๋“ฏ
#40267

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰