Definitelytyped: @types/superagent ์˜ค๋ฅ˜ TS2304: 'XMLHttpRequest' ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 10์›” 17์ผ  ยท  31์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: DefinitelyTyped/DefinitelyTyped

  • [ ] ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ตœ์‹  xxxx/xxxx.d.ts ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • [ ] ์•ˆ์ •์ ์ธ ์ตœ์‹  ๋ฒ„์ „์˜ tsc๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. https://www.npmjs.com/package/typescript
  • [ ] StackOverflow ์— ์ ํ•ฉํ•˜์ง€ ์•Š์€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (์ ์ ˆํ•œ ์งˆ๋ฌธ์ด ์žˆ์œผ๋ฉด ๊ฑฐ๊ธฐ์—์„œ ์งˆ๋ฌธํ•˜์‹ญ์‹œ์˜ค.)
  • [ ] xxxx/xxxx.d.ts ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

    • ํ•ด๋‹น ์œ ํ˜• ์ •์˜์˜ ์ž‘์„ฑ์ž๋Š” cc/ @....

์˜ค๋Š˜ ๋‚ด ๋นŒ๋“œ๋Š” @type/superagent์˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ๋ฒ„์ „ 2.0.34์—์„œ ์‹œ์ž‘๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•  ๋•Œ๊นŒ์ง€ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ „์—๋Š” Typescript ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋ฒ„์ „ 2.1.0-dev.20161017 ์‚ฌ์šฉ).

@types/ [email protected] ์—์„œ ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
node_modules/@types/superagent/index.d.ts(79,12): ์˜ค๋ฅ˜ TS2304: 'XMLHttpRequest' ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@types/ [email protected] ์—์„œ ์˜ค๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
node_modules/@types/superagent/index.d.ts(79,12): ์˜ค๋ฅ˜ TS2304: 'XMLHttpRequest' ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์ •๋ณด๊ฐ€ ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

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

๋‚ด tsconfig.json์— "dom"์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ์„œ๋ฒ„ ์ธก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. XMLHttpRequest๋Š” Node.js์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉฐ ์ˆ˜ํผ์—์ด์ „ํŠธ ํŒจํ‚ค์ง€๋Š” Node.js์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์กฐ๊ฑด๋ถ€๋กœ XMLHttpRequest๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” @typings ํŒจํ‚ค์ง€์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๊ฐ€ Node.js์™€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž˜ ์ž‘๋™ํ•œ๋‹ค๋ฉด @typings ๋„ ์ž˜ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

tsc์— --lib dom ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ๋„์›€์ด๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์ง์ ‘์ ์ธ ์˜์กด์„ฑ์ด ์ตœ๊ณ ์ž…๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ ์ธก ์ฝ”๋“œ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@vvakame โ€” tsconfig.json์— ์žˆ๋Š” ๋‚ด compilerOptions.lib ๋ฐฐ์—ด์— tsconfig.json "dom" ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํŠธ๋ฆญ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค์†Œ ์ง๊ด€์ ์ด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ˆ์ƒ๋œ ๋™์ž‘์ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์ผ์‹œ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๊นŒ?

๋ฉด์ฑ… ์กฐํ•ญ: ์ €๋Š” ์Šˆํผ์—์ด์ „ํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

https://www.npmjs.com/package/superagent

์œ ์ฐฝํ•œ API๊ฐ€ ํฌํ•จ๋œ ์šฐ์•„ํ•˜๊ณ  ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•œ ๋ธŒ๋ผ์šฐ์ €/๋…ธ๋“œ HTTP

ํ•ด๊ฒฐํ•ด.

interface XMLHttpRequest {}

"dom" ๋ฅผ tsconfig.json ์— ์ถ”๊ฐ€ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ํŒŒ์ผ์— lib ์„น์…˜์ด ์—†๊ณ  ์ด์ œ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ "es2016" ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

์ด ๋ฌธ์ œ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? tsconfig.json ์ˆ˜์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

["dom", "es2017"] ๋ฅผ lib์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด tsconfig.json์— "dom"์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ์„œ๋ฒ„ ์ธก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. XMLHttpRequest๋Š” Node.js์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉฐ ์ˆ˜ํผ์—์ด์ „ํŠธ ํŒจํ‚ค์ง€๋Š” Node.js์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์กฐ๊ฑด๋ถ€๋กœ XMLHttpRequest๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” @typings ํŒจํ‚ค์ง€์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€๊ฐ€ Node.js์™€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž˜ ์ž‘๋™ํ•œ๋‹ค๋ฉด @typings ๋„ ์ž˜ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜๋„ ์ด๊ฒƒ์— ๋ถ€๋”ช์ณค๋‹ค. ํŠน์ • ์œ ํ˜•์„ ์กฐ๊ฑด๋ถ€๋กœ ์ œ๊ณต/์ œ์™ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋…ธ๋“œ ๋ฐ dom ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ superagent.d.ts ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// error TS2304: Cannot find name 'XMLHttpRequest'
declare interface XMLHttpRequest {}
// error TS2304: Cannot find name 'Blob'
declare interface Blob {}

@vvakame ๋…ธ๋“œ ๋˜๋Š” DOM ์‚ฌ์šฉ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋‘ ํ™˜๊ฒฝ ๋ชจ๋‘์—์„œ ๋ชจ๋‘ ์ž…๋ ฅ์ด ํ•„์š”ํ•œ '์˜ˆ์ƒ ๋™์ž‘'์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋…ธ๋“œ์—์„œ ๋ธŒ๋ผ์šฐ์ € ์ „์—ญ์— ์•ก์„ธ์Šคํ•  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฒ„๊ทธ๋ฅผ ์‰ฝ๊ฒŒ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” https://github.com/strongloop/loopback-next ์—์„œ๋„ ์ด๊ฒƒ์— ๋ฌผ๋ ธ์Šต๋‹ˆ๋‹ค. dom lib๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ Node.js์— ์—†๋Š” Request ์™€ ๊ฐ™์€ ์œ ํ˜•์œผ๋กœ ๊ฐ‘์ž๊ธฐ ์˜ค์—ผ๋ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” HTTP ์„œ๋ฒ„ ์Šคํƒ์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ import {ServerRequest as Request} from 'http' ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ค„์ด ์‹ค์ˆ˜๋กœ ์ƒ๋žต๋˜๊ฑฐ๋‚˜ ServerRequest ๊ฐ€ Request ๋กœ ๋ณ„์นญ๋˜์ง€ ์•Š์œผ๋ฉด TypeScript๋Š” ์ฝ”๋“œ๋ฅผ ํ–‰๋ณตํ•˜๊ฒŒ ์ปดํŒŒ์ผํ•˜๊ณ  ๋Ÿฐํƒ€์ž„์—๋งŒ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, TypeScript๋Š” ๋” ์ด์ƒ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์ด์ œ ๋ง‰ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์žˆ๊ณ  supertest์—์„œ chai-http๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ์˜๋ฆฌํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ chai-http๋Š” @types/supertest๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. -_-

๋‹ค์Œ์€ ์ผ์ข…์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. https://github.com/jwalton/node-supertest-fetch

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ˆ˜์ • ์‚ฌํ•ญ์ด ์—†์„๊นŒ์š”? @zephyrec ์ด ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์„ ์„œ๋ฒ„ ์ธก(์ฆ‰, ๋…ธ๋“œ)์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์›๋ณธ์„ ํ™•์žฅํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ typescript ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ tsconfig.test.json ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

{
  "extends": "./tsconfig.prod.json",
  "compilerOptions": {
    "lib": ["dom", "..."] // supertest requires dom for type definitions to work
  }
}

(๋˜๋Š” libs๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋Œ€์‹  ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋ž˜๊ทธ skipLibCheck:true ๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ชจ๋“  node_modules ์— ๋Œ€ํ•œ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

ts-jest ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ํ†ตํ•ด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"jest": {
        "globals": {
            "ts-jest": {
                "tsConfig": "tsconfig.test.json"
            }
        }
}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ผ๋ฐ˜ ์ฝ”๋“œ์—์„œ ํ˜•์‹ ์•ˆ์ „์„ฑ์„ ํฌ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ ˆ๋Œ€ ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(์ด๋ ‡๊ฒŒ ํ•˜๊ธฐ ์ „์— ํ•˜ํŠธ๋น„ํŠธ์—์„œ supertest๋ฅผ ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค).

https://github.com/DefinitelyTyped/DefinitelyTyped/pull/33517 ์€ ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€๋งŒ ํ•ด๋‹น PR์€ ์˜ค๋ฅ˜๋กœ ๋ณ‘ํ•ฉ๋˜์–ด ๋ฐฉ์ง€๋ฉ๋‹ˆ๋‹ค.

chai-http depends on superagent but has a lower required TypeScript version

@types/superagent์— ์˜์กดํ•˜๋Š” ๋ชจ๋“  @types ํŒจํ‚ค์ง€๊ฐ€ TypeScript ์š”๊ตฌ ์‚ฌํ•ญ์„ 3.0 ์ด์ƒ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ๋•Œ๊นŒ์ง€ @types/superagent๊ฐ€ TypeScript ์š”๊ตฌ ์‚ฌํ•ญ์„ 3.0 ์ด์ƒ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋กœ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด TypeScript ๋ฒ„์ „์„ ๋‚˜์—๊ฒŒ ์˜์กดํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์˜ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ TypeScript ๋ฒ„์ „์— ๊ณ ์ •์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— @types ์‹œ์Šคํ…œ์˜ ๊ฒฐํ•จ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ทธ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ๋‚ด ์ดํ•ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

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

/// <reference lib="dom" />
import request = require('supertest');

"triple-slash" lib ์ง€์‹œ๋ฌธ์€ TypeScript ๋ฒ„์ „ 3.0 ์ด์ƒ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ˜ธ๊ฐ€ ์—ฐ ์ง€ ๊ฑฐ์˜ 2.5๋…„์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

FWIW, TypeScript์˜ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ skipLibCheck ์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

skipLibCheck ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด TypeScript๋Š” @types/superagent ์™€ ๊ฐ™์€ ์ข…์†์„ฑ๊ณผ ํ”„๋กœ์ ํŠธ์— ์žˆ์„ ์ˆ˜ ์žˆ๋Š” .d.ts ํŒŒ์ผ ๋ชจ๋‘์—์„œ .d.ts ํŒŒ์ผ์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ dom ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋” ์ด์ƒ ๋ถˆํ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ข‹์€ ๋ถ€์ž‘์šฉ์œผ๋กœ skipLibCheck ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋นŒ๋“œ ์†๋„๋„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

@bajtos ์œ ํ˜• ์•ˆ์ „์„ฑ์ด ๊ฐ์†Œํ•˜๋ฏ€๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • lib: [ "es6" ] ์ผํ•จ
  • target: "es2016+" ๋„ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

@G-Rath ๋‚ด๊ฐ€ ์˜คํ•ดํ•˜์ง€ ์•Š๋Š” ํ•œ skipLibCheck๋Š” ์ฝ”๋“œ์˜ ์œ ํ˜• ์•ˆ์ „์„ฑ์„ ์ค„์ด์ง€ ์•Š๊ณ  d.ts ํŒŒ์ผ๋งŒ ์ค„์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์€ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ ๋ชจ๋“ˆ์˜ ์ผ๋ถ€์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

skipLibCheck์™€ ๊ด€๋ จํ•˜์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• IMO๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. https://stackoverflow.com/questions/52311779/usage-of-the-typescript-compiler-argument-skiplibcheck ์—์„œ "์˜ค๋ฅ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋”ฐ๋ผ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฝ”๋“œ์˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด ์ž˜๋ชป๋œ ์œ ํ˜•์„ any๋กœ ๋Œ€์ฒดํ•˜์—ฌ) ๋ˆˆ์— ๋„์ง€ ์•Š๊ฒŒ ํ•˜์—ฌ ์œ ํ˜• ์˜ค๋ฅ˜๋ฅผ ์–ต์ œํ•˜๋Š” ๊ฒƒ์€(--skipLibCheck, //@ts-ignore ๋˜๋Š” ๊ธฐํƒ€ ์ˆ˜๋‹จ์— ์˜ํ•ด) ์œ„ํ—˜ํ•œ ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค."

@carnesen ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์— ์ €๋ฅผ ๊ฑธ์—ˆ์Šต๋‹ˆ๋‹ค - ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์ธ์šฉํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ์ •ํ™•ํ•œ stackoverflow ์งˆ๋ฌธ์ด์—ˆ์Šต๋‹ˆ๋‹ค :joy:

@rjmunro ์ž˜๊ฐ€์š” ๐Ÿ˜ƒ

// @ts-ignore ๋งŒํผ ๋‚˜์˜์ง€๋Š” ์•Š์ง€๋งŒ ์œ ํ˜• ์˜ค๋ฅ˜๋ฅผ ์–ต์ œํ•˜๋Š” ๊ฒƒ์€ ์•„๋ฌด๋ฆฌ ๋“œ๋ฌผ๋”๋ผ๋„ ๊ธฐ์ˆ ์ ์œผ๋กœ ์ฝ”๋“œ์˜ ์œ ํ˜• ์•ˆ์ „์„ฑ์„ ์•ฝํ™”์‹œํ‚ต๋‹ˆ๋‹ค. ํŠนํžˆ node_modules ํด๋”๊ฐ€ .d.ts ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊นจ๋—ํ•œ ์†”๋ฃจ์…˜์€ Blob ๋ฐ XMLHttpRequest ์— ๋Œ€ํ•œ ์ฐธ์กฐ ์ดํ›„ superagent ์œ ํ˜• ์ •์˜์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์ฐธ์กฐ๋กœ dom ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” @carnesen ์˜ PR #33517์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. XMLHttpRequest ๋Š” superagent ์œ ํ˜• ์ •์˜์— ํ•„์š”ํ•˜์ง€๋งŒ ์‚ฌ์šฉ ๋ฐฉ์‹(_browser vs node_)์— ๋”ฐ๋ผ ๊ตฌํ˜„์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ ์ผํ•œ ์ง„์งœ ๋‹จ์ ์€ lib ์ฐธ์กฐ๊ฐ€ ์ง€๊ธˆ ์•ฝ 9๊ฐœ์›” ์ „์— ๋ฆด๋ฆฌ์Šค๋œ typescript ๋ฒ„์ „ 3.0.0์„ ํ•„์š”๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด chai-http( Travis-CI ์ฐธ์กฐ)์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ๋˜๋Š” typescript ๋ฒ„์ „์„ 3.0.0์œผ๋กœ ์˜ฌ๋ ค์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ์ข…์†์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜ 2๋‹ฌ๋งŒ์—..

์ด ๋ชจ๋“  ๊ฒƒ์„ ์ฝ์€ ํ›„ ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๊นจ๋—ํ•œ ์†”๋ฃจ์…˜์€ @carnesen ์—์„œ ์ œ๊ณต๋˜์ง€๋งŒ ์ €์—๊ฒŒ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :-(

/// <reference lib="dom" />
import request = require('supertest');

๋‚˜๋Š” ๋˜ํ•œ ๊ทธ์˜ PR(https://github.com/DefinitelyTyped/DefinitelyTyped/pull/33517)์„ ํ™•์ธํ–ˆ์ง€๋งŒ chai-http ๋Š” 3.0 ๋ฏธ๋งŒ์˜ TS ๋ฒ„์ „์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— TravisCI ์˜ค๋ฅ˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค...

์ €๋Š” TypeScript๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ์ด๋ฏ€๋กœ ์ž˜๋ชป๋œ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”. ์ €๋Š” Travis CI ๋กœ๊ทธ๋ฅผ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด @carnesen ์ด ์ƒˆ PR์—์„œ ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค(https://github.com/DefinitelyTyped/DefinitelyTyped/pull/36282).

ํŽธ์ง‘ํ•˜๋‹ค:

chai-http ๋Š” ๋” ์ด์ƒ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์ง€๋งŒ promisify-supertest ๋Š”... ๋ณ„๋กœ ์ธ๊ธฐ๊ฐ€ ์—†๋Š” ๋ฒ„๋ ค์ง„ ํŒจํ‚ค์ง€์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. (https://github.com/ariporad/promisify-supertest/blob /๋งˆ์Šคํ„ฐ/ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค.js)

์ด๊ฒƒ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ณผ์ •์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํŽธ์ง‘ 2:

๋” ๊นŠ์ด ํŒŒ๊ณ  ๋“ค์–ด ๋‹ค์Œ ์œ ํ˜• ์ •์˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•จ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์•ฝ์† - ์ตœ๊ณ 
  • ๋‹จ์ˆœ cw ๋…ธ๋“œ
  • ์Šˆํผ์—์ด์ „ํŠธ-๋ฒˆ์—ฐ
  • ์Šˆํผ ์—์ด์ „ํŠธ ์—†์Œ ์บ์‹œ
  • ์Šˆํผ์—์ด์ „ํŠธ ์ ‘๋‘์‚ฌ
  • ์Šˆํผํ…Œ์ŠคํŠธ

// ์˜ค๋ฅ˜ TS2304: 'XMLHttpRequest' ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ธํ„ฐํŽ˜์ด์Šค XMLHttpRequest ์„ ์–ธ {}
// ์˜ค๋ฅ˜ TS2304: 'Blob' ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ธํ„ฐํŽ˜์ด์Šค Blob {} ์„ ์–ธ

@JasonKleban ์ด ํŒŒ์ผ์€ ์–ด๋””๋กœ ๊ฐ€๋‚˜์š”? node_modules > superagent ? ๋‚˜๋Š” ์ด๊ฒƒ์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•ด ์™”์œผ๋ฉฐ ๋‚ด ์žฌ์น˜์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

@mikeyamato - ์–ด๋””์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์ง€๋งŒ, ํ•ด๋‹น ํŒŒ์ผ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— node_modules์—์„œ๋Š” ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๋‹ค๋ฅธ ์†Œ์Šค ํŒŒ์ผ๊ณผ ๋‚˜๋ž€ํžˆ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๋จผ์ € ์‹œ๋„ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์—†์Œ?

tsconfig.json ํƒ€์ดํ•‘ ํด๋” ์„ค์ •์œผ๋กœ ์‹คํ—˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘: ์ด๊ฒƒ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค: #41425


#36282์˜ ๋ณ‘ํ•ฉ๊ณผ ํ•จ๊ป˜ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ธ๋“œ ์ „์šฉ ํ”„๋กœ์ ํŠธ์—์„œ ์ˆ˜ํผ์—์ด์ „ํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํŠธ๋ฆฌํ”Œ ์Šฌ๋ž˜์‹œ ์ง€์‹œ๋ฌธ ๋„์ž…

/// <reference lib="dom" />

๊ฒฐ๊ณผ์ ์œผ๋กœ DOM ์œ ํ˜•์ด ํ”„๋กœ์ ํŠธ์— ํˆฌ๋ช…ํ•˜๊ฒŒ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋…ธ๋“œ ์ „์šฉ ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ DOM์ด ์—†์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

window.setTimeout()

TypeScript ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. DOM ์œ ํ˜•์ด ์ž๋™์œผ๋กœ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉฐ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋ฏธ๋ฌ˜ํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ ์ „์šฉ ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ € ์ „์šฉ ์ž…๋ ฅ์„ ํ”„๋กœ์ ํŠธ์— ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜์กด์„ฑ์„ ๊ฐ–๋Š” ๋˜ ๋‹ค๋ฅธ ๋ถ€์ž‘์šฉ์€ dom supertest ( superagent ) ๊ฐ€ lib: webworker , ์ฐธ์กฐ: https: //github.com/microsoft/TypeScript/issues/20595. ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ํ•œ, ์ด๊ฒƒ์€ ์ด์ „์— ์–ธ๊ธ‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

$ npm i @types/ superagent@latest -D

ํŠธ๋ฆญ์„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค!

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

๊ด€๋ จ ๋ฌธ์ œ

demisx picture demisx  ยท  3์ฝ”๋ฉ˜ํŠธ

csharpner picture csharpner  ยท  3์ฝ”๋ฉ˜ํŠธ

tyv picture tyv  ยท  3์ฝ”๋ฉ˜ํŠธ

Zzzen picture Zzzen  ยท  3์ฝ”๋ฉ˜ํŠธ

victor-guoyu picture victor-guoyu  ยท  3์ฝ”๋ฉ˜ํŠธ