Definitelytyped: [D3] ์žฌ์ •์˜ ์ •์˜/๊ธฐ์ˆ ์  ๋ถ€์ฑ„ ๊ฐ์†Œ

์— ๋งŒ๋“  2018๋…„ 02์›” 13์ผ  ยท  45์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: DefinitelyTyped/DefinitelyTyped

  • [x] [๋ฉ˜์…˜](https://github.com/blog/821-mention-somebody-they-re-notified) ์ž‘์„ฑ์ž( Definitions by: in index.d.ts ์ฐธ์กฐ) ๋Œ€๋‹ตํ•˜๋‹ค.

    • ์ž‘์„ฑ์ž: @tomwanzek @gustavderdrache @Ledragon

#11365, #11365 ๋ฐ #17846์— ๋Œ€ํ•œ ๋Œ€์ฒด ์ถ”์  ๋ฌธ์ œ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ D3 ๋ชจ๋“ˆ ์ •์˜์™€ ๊ด€๋ จ๋œ ๊ฐœ์„ /๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ž…๋‹ˆ๋‹ค.

  • JSDoc: ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์ œ๋„ค๋ฆญ ์„ค๋ช…์„ ํฌํ•จํ•œ ์™„์ „ํ•œ JSDoc ์ฃผ์„
  • strictNullChecks: strictNullChecks ์— ๋Œ€ํ•ด ๊ฒ€์ฆ๋˜์—ˆ์œผ๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์ด true ๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • strictFunctionTypes: strictFunctionTypes ์— ๋Œ€ํ•ด ๊ฒ€์ฆ๋˜์—ˆ์œผ๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์ด true ๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • TS 2.3: TS 2.3 ์˜ ์ตœ์†Œ ๋ฒ„์ „ ๋ฐ ์ •์˜๋Š” ์ œ๋„ค๋ฆญ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

| ์ •์˜| JSDoc | strictNullChecks | strictFunctionTypes | TS 2.3 |
| --- | --- | --- | --- | --- |
| d3 | ํ•ด๋‹น ์—†์Œ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | โœ… |
| d3 ๋ฐฐ์—ด | ๐Ÿ”ฒ | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3์ถ• | โœ… | โœ… | โœ… | โœ… |
| d3-๋ธŒ๋Ÿฌ์‹œ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ์ฝ”๋“œ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ์ปฌ๋ ‰์…˜ | โœ… | โœ… | โœ… | โœ… |
| d3์ƒ‰ | ๐Ÿ”ฒ | โœ… | โœ… | โœ… |
| d3 ์œค๊ณฝ | โœ… | โœ… | โœ… | ๐Ÿ”ฒ |
| d3-๋””์ŠคํŒจ์น˜ | โœ… | โœ… | โœ… | โœ… |
| d3-๋“œ๋ž˜๊ทธ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-dsv | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-์ด์ฆˆ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ๊ฐ€์ ธ์˜ค๊ธฐ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-ํฌ์Šค | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ํ˜•์‹ | โœ… | โœ… | โœ… | โœ… |
| d3-geo | โœ… | โœ… | โœ… | โœ… |
| d3-ํ—ฅ์Šค๋นˆ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ๊ณ„์ธต | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ๋ณด๊ฐ„ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-๊ฒฝ๋กœ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-ํด๋ฆฌ๊ณค | โœ… | โœ… | โœ… | โœ… |
| d3 ์ฟผ๋“œ ํŠธ๋ฆฌ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ํ | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-๋ฌด์ž‘์œ„ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-์š”์ฒญ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-sankey | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ์Šค์ผ€์ผ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ์Šค์ผ€์ผ ๋ฐ˜์Œ๊ณ„ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ์„ ํƒ | โœ… | โœ… | โœ… | ๐Ÿ”ฒ |
| d3-selection-multi | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ๋ชจ์–‘ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3์‹œ๊ฐ„ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ์‹œ๊ฐ„ ํ˜•์‹ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ํƒ€์ด๋จธ | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-์ „ํ™˜ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3-๋ณด๋กœ๋…ธ์ด | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ | ๐Ÿ”ฒ |
| d3 ํ™•๋Œ€ | โœ… | โœ… | ๐Ÿ”ฒ | ๐Ÿ”ฒ |

ํ•ต์‹ฌ ํŒ€ ์œ ์ง€ ๊ด€๋ฆฌ์˜ "์™ธ๋ถ€":

| ๋ชจ๋“ˆ | JSDoc | strictNullChecks | strictFunctionTypes | TS 2.3 |
| --- | --- | --- | --- | --- |
| d3-hsv | โœ… | โœ… | โœ… | โœ… |

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

@denisname ๐Ÿ’ฏ @gustavderdrache @ledragon ์ง€๋‚œ ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ๋ชจ๋“  ์ˆ˜๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ถ”์  ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”๋ฐ ๋ฒŒ์จ ํ›จ์”ฌ ๋” ์˜ˆ๋ป์š”! ์˜ˆ์œ ์ถ”์  ํ…Œ์ด๋ธ”์ด ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค :์Šค๋งˆ์ผ:

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

@gustavderdrache @Ledragon ์œ„์—์„œ D3 ์ •์˜ ์„ธํŠธ์ธ ์ž‘ํ’ˆ์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋ฏธํ•ด๊ฒฐ ์ž‘์—…์„ ํ†ตํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์งˆ๋ฌธ: ๋ชจ๋“  ์ •์˜๋ฅผ TS >=2.3 ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์ผ๊ด€๋˜๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ์ œ๋„ค๋ฆญ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ๊ธฐ๋Šฅ/๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
(์‹ค์ˆ˜๋กœ) ์ผ๋ถ€ ์ •์˜์—๋Š” ์ด๋ฏธ ์ •์˜ ํ—ค๋”์— // TypeScript Version: 2.3 ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์˜ˆ: geoJson ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” d3-geo . ์ด๋“ค์€ ์ด๋ฏธ ์ผ๋ฐ˜ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ์€ ๋ฌด์—‡๋ณด๋‹ค ํ™˜์˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ๊ณต๋ถ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค

์ตœ์†Œ TS 2.3์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ์ ์ ˆํ•œ ๊ฒฝ์šฐ any ๋Œ€์‹  object ์œ ํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. TS 2.2์™€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ œ ๊ธฐ์–ต์ด ๋งž๋‹ค๋ฉด ๊ฐœ์ฒด ๋ณด๊ฐ„๊ธฐ์™€ d3-collection์— ๋ช‡ ๊ฐ€์ง€ ๊ธฐํšŒ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐ:

  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ๋ชจ๋“  ๊ณณ์—์„œ 2.4๋ฅผ ์‹œํ–‰ํ•ด์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
  • ์—ฌ๊ธฐ์— strictNullChecks ๋ฐ strictFunctionTypes ๊ฐ€ ์žˆ๋Š” ์ง€์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค . ์—…๋ฐ์ดํŠธํ•˜์—ฌ PR์„ ์ œ์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค

์ด์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด ์žˆ๊ธฐ ์ „์— ๊ธฐ๋ณธ ์ œ๋„ค๋ฆญ์— ๋Œ€ํ•ด ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.p

TS 2.3๊ณผ ํ•จ๊ป˜ ์šฐ๋ฆฌ๋Š” 2017๋…„ 4์›”์˜ ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
TS 2.4๋Š” 2017๋…„ 6์›”์— ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ํฐ ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ตœ์†Œ 2.4(2.3์ด ์•„๋‹Œ)๋ฅผ ๊ฐ•์ œ ์ ์šฉํ•  ๋•Œ ์„ค์น˜ ๊ธฐ๋ฐ˜์˜ ์ผ๋ถ€ ๋˜๋Š” ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

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

@gustavderdrache ์ƒˆ๋กœ์šด ์ตœ์†Œ ์‚ฌ์–‘์œผ๋กœ TS 2.4์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

PR #23654์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด TS 2.4๋กœ ์ด๋™ํ•  ๋•Œ ๋น ๋ฅด๊ฒŒ ์บ์Šค์ผ€์ด๋“œํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(๋ฌธ์ž์—ด ์—ด๊ฑฐํ˜•๊ณผ ๊ฐ™์€ TS 2.4 ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  DT๋ฅผ ์œ„ํ•ด ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ถ€๊ณผํ•˜๋Š” ๊ฒฝ์šฐ์—๋„).

์ƒˆ๋กœ์šด PR #23724์— ๋”ฐ๋ผ ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด TS 2.3์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” TS 2.4๋ฅผ ์ถ”์ง„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@Ledragon ๋กœ์ปฌ d3-geo ํฌํฌ์—์„œ ์ด๋ฏธ ๋ณด๋ฅ˜ ์ค‘์ธ PR์„ ์—ด๋ ค๋ฉด ์œ„์˜ ํ™•์ธ๋ž€์„ ์„ ํƒํ•˜์—ฌ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค... ๊ทธ๋ž˜์„œ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ ํŠธ๋ž˜๋น„์Šค ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ๊ฒƒ ๊ฐ™์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๊ฐ€์„œ ๋ณผ๊ฒŒ

23794 ์ œ์ถœ๋จ - ๋‚ด ๊ฐ€์žฅ ์ž๋ž‘์Šค๋Ÿฌ์šด ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ๋ด…์‹œ๋‹ค...

์ž, ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. d3-geo ํ…Œ์ŠคํŠธ๋Š” TS 2.3์—์„œ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฒ„์ „์„ 2.4๋กœ ์„ค์ •ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ d3 global์€ TS 2.3์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด์„œ ์ด๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง„ํ–‰ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์กฐ์–ธ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” g3-geo PR์„ ์‚ดํŽด๋ณด๊ณ  ๊ทธ๋“ค์ด ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๊ฑฐ๊ธฐ์— ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. d3-collection ์—์„œ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋˜ OoM ๋ฒ„๊ทธ์™€ ๋‹ฌ๋ฆฌ, ์šฐ๋ฆฌ๋Š” ์ž‘์—…ํ•  ์ ์ ˆํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜„

d3-contour ๋ฅผ 1.2.0์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด #24118์„ ๋ฐฉ๊ธˆ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.
d3-contour ์œ ํ˜•์ด ์ด๋ฏธ TS2.3 ์— ์žˆ๊ณ  strictNullChecks ๋ฐ strictFunctionTypes ๊ฐ€ true๋กœ ์„ค์ •๋˜์–ด ์žˆ์Œ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค :-)

d3-contour ์œ„์— ๋จธ๋ฌผ๋Ÿฌ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒํ•œ ์ด์œ ๋กœ "Watching"์— ๋Œ€ํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค! :์›ƒ๋‹ค:

๊ณง PR์„ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” d3์ถ• ๋ฐ d3 ํ˜•์‹์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋๋‚ฌ์–ด์š”. ํ•˜์ง€๋งŒ ์งˆ๋ฌธ์ด ์ข€...

d3 ํ˜•์‹์—์„œ๋Š” d3 ๋ฐฐ์—ด์—์„œ์™€ ๋™์ผํ•œ Numeric ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

interface Numeric {
    valueOf(): number;
}

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์„ ํ•  ๋•Œ d3 ์ „์—ญ ์ •์˜์—์„œ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Module 'd3-array' has already exported a member named 'Numeric'. d3 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๊ณต์œ  ์œ ํ˜•์„ ๋„ฃ์„ ์žฅ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ์ผ๋ถ€ d3 ์ •์˜(interpolate, scale, shape)์—์„œ ํ†ตํ•ฉ ์œ ํ˜• number | { valueOf(): number } ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. { valueOf(): number } ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@denisname d3-axis , d3-format ๋ฐ ์ดํ›„ d3-array ์ž์›๋ด‰์‚ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค !!!

์œ„์˜ ์งˆ๋ฌธ์—:

(1) d3-xxx ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ทœ์น™์œผ๋กœ ์ •์˜๋Š” ๊ธฐ๋ณธ ํ•ด๋‹น D3 ๋ชจ๋“ˆ ๊ฐ„์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ข…์†์„ฑ์„ ๋„์ž…ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด d3-axis ์—๋Š” d3-array ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์—†์œผ๋ฏ€๋กœ d3-axis ์— ๋Œ€ํ•œ ์ •์˜ index.ts ํŒŒ์ผ์€ d3-axis d3-array ์—์„œ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ JS ์†Œ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๋Š์Šจํ•œ ๊ฒฐํ•ฉ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜์‹ฌ์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ ๊ธฐ๋ณธ D3 ๋ชจ๋“ˆ package.json ์˜ dependencies ์†์„ฑ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. _์ฐธ๊ณ : ๋ฌผ๋ก  d3-xxx-test.ts ํŒŒ์ผ์˜ ๋ชจ๋“  ํŒจํ‚ค์ง€์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "ํ†ตํ•ฉ" ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€์—์„œ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‘ ํŒจํ‚ค์ง€ ์‚ฌ์ด์— ํ˜•์‹์ ์ธ ์ข…์†์„ฑ์ด ์—†์„ ์ˆ˜ ์žˆ์ง€๋งŒ ํ•˜๋‚˜์˜ ๋ฉค๋ฒ„๋Š” "์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ" ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฝ”๋“œ ๊ฒฝ๋กœ๊ฐ€ ๋ฌธ์ œ ์—†์ด ์„ ํƒ ์†์„ฑ ์„ค์ •๊ธฐ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋„๋ก d3-chord d3-selection ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค._

(2) Numeric ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทœ์น™ (1)์— ๋”ฐ๋ผ d3-array ์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋Š” ๋‹ค๋ฅธ D3 ๋ชจ๋“ˆ์—์„œ ๋‹ค์‹œ ์„ ์–ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

(3) { valueOf(): number } ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๊นŒ? ๊ธฐ์ˆ ์ ์œผ๋กœ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ, ๊ต์ฐจ ์œ ํ˜•์€ ์•ฝ๊ฐ„์˜ ์ค‘๋ณต์„ฑ์ด ์žˆ์ง€๋งŒ ๋งŽ์€ ์ธ๊ฐ„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ ์–ธ์ ์œผ๋กœ ๋” ๋ช…ํ™•ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, number ๋Š” ์ •์‹  ๊ณก์˜ˆ ์—†์ด ์–ธ๋œป ๋ณด๊ธฐ์— ์œ ํšจํ•œ ์œ ํ˜•์ž„์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. :๋ˆˆ์ง“:

d3-color์— ๋Œ€ํ•ด prototype ๊ฐ€ ๋ชจ๋‘ ์ฃผ์„ ์ฒ˜๋ฆฌ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? @tomwanzek๊ฐ€ ์ด ์ปค๋ฐ‹ ์—์„œ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž…์„ ๋‹ค์‹œ ์„ค์ •ํ•˜๋ฉด typeguard ๊ธฐ๋Šฅ ์—†์ด instanceof ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let cRGB: d3.RGBColor;
let cHSL: d3.HSLColor;

const c: d3.RGBColor | d3.HSLColor = d3.color("steelblue");

if (c instanceof d3.rgb) {
    cRGB = c;
} else {
    cHSL = c;
}

@denisname ์ธํ„ฐํŽ˜์ด์Šค์— ๊ฒŒ์‹œ๋œ API์˜ ์ผ๋ถ€๋กœ prototype ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์ฃผ์ €ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ํ•ดํ‚น๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜์˜ type Guards spec ์—์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๊ฒƒ์€ . ์ด๊ฒƒ์€ ์ด์ œ ์œ ํšจํ•œ _๊ฑด์„ค_์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก ํ•ญ๋ชฉ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

x instanceof C ํ˜•์‹์˜ ์œ ํ˜• ๊ฐ€๋“œ, ์—ฌ๊ธฐ์„œ x๋Š” Any ์œ ํ˜•์ด ์•„๋‹ˆ๊ณ , C ๋Š” ์ „์—ญ ์œ ํ˜• 'Function'์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋ฉฐ, C ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 'ํ”„๋กœํ† ํƒ€์ž…' [...]

d3-color ์˜ strictNullChecks ๋ฒ„์ „์„ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹จ ํ•œ ์ค„์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. prototype ๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ์ž…๋‹ˆ๋‹ค.

๋‚ด ํ…Œ์ŠคํŠธ์—์„œ $# instanceof ์— ๋Œ€ํ•œ prototype ์†์„ฑ์ด๋‚˜ new(): T ์„ ์–ธ์ด ํ•„์š”ํ•˜์—ฌ ์œ ํ˜•์„ ์ ์ ˆํ•˜๊ฒŒ ์ขํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” v3 ํƒ€์ดํ•‘์—์„œ new(): Color ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ–ˆ๊ณ  ํ•ด๋‹น ๊ด€์šฉ๊ตฌ๊ฐ€ D3v4 ์ด์ƒ์—์„œ ์—ฌ์ „ํžˆ ์ง€์›๋œ๋‹ค๋ฉด ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ดœ์ฐฎ์•„ ๋ณด์ด๋ฏ€๋กœ ์—ฐ์†์„ฑ์„ ์œ„ํ•ด v3 ๊ทœ์น™์„ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ์ž‘ํ’ˆ์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค.

@gustavderdrache

d3 v3์—์„œ ์ž‘๋™ํ•˜๋Š” ์ด์œ ๋Š” new() ์˜ ๋ฐ˜ํ™˜ ์œ ํ˜•์ด ํ•ญ์ƒ prototype ์œ ํ˜•๊ณผ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ d3 v4์—๋Š” ๋‹ค์Œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

export const color: ColorFactory;
export interface ColorFactory extends Function {
    (cssColorSpecifier: string): RGBColor | HSLColor;
    prototype: Color; // and not RGBColor | HSLColor !
}

์‹ค์ œ๋กœ d3.lab(0,0,0) instanceof d3.color ๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๋ฉด

export const color: ColorFactory;
export interface ColorFactory extends Function {
    (cssColorSpecifier: string): RGBColor | HSLColor;
    new (cssColorSpecifier: string): RGBColor | HSLColor;
}

ColorFactory ์œ ํ˜• Color ์—๋Š” $#$ prototype $#$ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ์— ์‹คํŒจํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

declare let l: d3.LabColor | null;
declare let c: d3.Color;
declare let nil: null;

if (l instanceof d3.color) {
    c = l; // l is not inferred as `d3.LabColor`...
} else {
    nil = l; // fail, l is a `d3.LabColor | null` should be a `null`
}

๋‹น์‹ ์˜ ์˜๊ฒฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค? new ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”.

์ผ๋ถ€ ํ…Œ์ŠคํŠธ์— ๋”ฐ๋ฅด๋ฉด color() ์— ๋Œ€ํ•œ prototype ์†์„ฑ์€ $#$ RGBColor | HSLColor Color $์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

> d3.color.prototype === d3.rgb.prototype
false
> d3.rgb.prototype instanceof d3.color
true

color() ํ•จ์ˆ˜๋Š” RGB ๋˜๋Š” HSL ์ƒ‰์ƒ์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ํ•ด๋‹น ํ”„๋กœํ† ํƒ€์ž…์€ ๋‹ค๋ฅธ ์ƒ‰์ƒ ๊ณต๊ฐ„์˜ ์ƒ์œ„ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

@denisname @Ledragon @gustavderdrache ์—ฌ๋Ÿฌ๋ถ„์ด ์ด ์Šค๋ ˆ๋“œ์— ๋ชจ๋‘ ์ฐธ์—ฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋žตํ•œ ์ฐธ๊ณ ์šฉ์œผ๋กœ: ์ด๋ฒˆ ์ฃผ๋ง์— ์—ฌ๋Ÿฌ๋ถ„์ด ์•Œ๊ณ  ์žˆ๋Š” ๊ณต๊ฐœ ํ•ญ๋ชฉ์„ ๋”ฐ๋ผ์žก์„ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

์ž, d3-geo๊ฐ€ ๋ฌธ ๋ฐ–์— ์žˆ์Šต๋‹ˆ๋‹ค(@ledragon์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค). @denisname ์˜ ๋ถˆํ–‰ํžˆ๋„ d3-format ๋ฐ d3-axis ์— ๋Œ€ํ•œ ํ์‡„๋œ PR์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ @denisname ์„ ์ •์˜์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์œ ์ง€ ๊ด€๋ฆฌ์ž๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์— d3-color ๋ฅผ ์‚ดํŽด๋ณด๊ณ  1.1.0 ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ํ•ฉ๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์—…๊ทธ๋ ˆ์ด๋“œ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋˜ํ•œ @denisname ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

@Ledragon ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

d3-color ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค( lhc ๋ฐ gray ๋Š” ์•„์ง ์—†์Œ). ๋‚˜๋Š” ๋‹จ์ง€ ํ•˜๋‚˜์˜ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ง‰ํ˜”์Šต๋‹ˆ๋‹ค.

@gustavderdrache ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

color() ํ•จ์ˆ˜๋Š” RGB ๋˜๋Š” HSL ์ƒ‰์ƒ์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ํ•ด๋‹น ํ”„๋กœํ† ํƒ€์ž…์€ ๋‹ค๋ฅธ ์ƒ‰์ƒ ๊ณต๊ฐ„์˜ ์ƒ์œ„ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ์‰ฝ๊ฒŒ _typed_ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์˜๊ฒฌ ์˜ ์ฒซ ๋ฒˆ์งธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ @tomwanzek ์€ new() ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  prototype ๋Š” ํ”ผํ•˜๋„๋ก ์ œ์•ˆ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”?...

์ข€ ๋” ๊ฐ€์ง€๊ณ  ๋†€๊ณ  ๋‚˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. ColorConstructor ์ธํ„ฐํŽ˜์ด์Šค์—์„œ new(): Color ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

declare namespace d3 {
  interface Color {
    // I forgot what was on the Color interface
    // This property exists just to make Color incompatible with {}
    __isColor: never;
    toString(): string;
  }

  interface RGBColor extends Color {
    r: number;
    g: number;
    b: number;
  }

  interface HSLColor extends Color {
    h: number;
    s: number;
    l: number;
  }

  interface LABColor extends Color {
    l: number;
    a: number;
    b: number;
  }

  interface ColorConstructor {
    (specifier: string): RGBColor | HSLColor;
    new(specifier: string): Color; // <- TS uses this for narrowing with instanceof
  }

  const color: ColorConstructor;
}

declare let l: d3.LABColor | null;
declare let c: d3.Color;
declare let nil: null;

if (l instanceof d3.color) {
  // Succeeds with l: d3.LABColor
  c = l;
} else {
  // Succeeds with l: null
  nil = l;
}

๊ฒฐ๋ก : prototype ์†์„ฑ์„ ๋…ธ์ถœํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด๊ฒƒ์ด ์ƒ์„ฑ์ž์™€ instanceof ํ…Œ์ŠคํŠธ์˜ ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์„ ๋‹ค๋ฃจ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  interface ColorConstructor {
    (specifier: string): RGBColor | HSLColor;
    new(specifier: string): RGBColor | HSLColor;

    readonly prototype: Color; 
  }

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ด ๋Šฆ์–ด์ ธ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ prototype ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๋‹น์‹œ์—๋Š” instanceof ๋„ ๋‹ค๋ฃจ๋ ค๋Š” ์ฒซ ๋ฒˆ์งธ ์ถฉ๋™์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ "๋Š๋‚Œ"์ด ๋‚ฌ์ง€๋งŒ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๊ด€ํ–‰์œผ๋กœ ๊ฐ„์ฃผ๋˜๊ณ  D3v3์—์„œ์™€ ๊ฐ™์ด new() ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ต์…˜์ด ์•„๋‹Œ ๊ฒฝ์šฐ...ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ€์ž!

@tomwanzek ์—์„œ ์ถ”์  ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

d3-axis , d3-color , d3-dispatch , d3-format ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ $ strictNullChecks strictFunctionTypes ๋ฐ TS 2.3 ์—ด์— โœ…๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. d3-format , d3-polygon ๋ฐ d3-hsv .

๋˜ํ•œ d3-dispatch , d3-polygon ๋ฐ d3-hsv $ ์— ๋Œ€ํ•ด $ JSDoc ์—ด์— โœ… ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”

d3-geo ์ธํ„ฐํŽ˜์ด์Šค GeoIdentityTranform ์— ์˜คํƒ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. GeoIdentityTransform ( s ํฌํ•จ)์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•ด๋„ ๋ ๊นŒ์š”? ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•œ ์šฐ๋ ค ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@denisname for d3-geo s GeoIdentityTranform , ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ฒ ์ž๊ฐ€ ํ‹€๋ฆฐ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค(Great catch!)( geoIdentity() ์˜ ๋ฐ˜ํ™˜ ์œ ํ˜•์œผ๋กœ ์‚ฌ์šฉ ํฌํ•จ)
  • ๋‹น๋ถ„๊ฐ„ ์ถ”๊ฐ€
/**
 * <strong i="13">@deprecated</strong> Misspelled name. Use GeoIdentityTransform.
 */
export type GeoIdentityTranform = GeoIdentityTransform;
  • ๋‚˜์ค‘์— ํŽธ๋ฆฌํ•œ ๋‹จ๊ณ„์—์„œ ์ฒ ์ž๊ฐ€ ํ‹€๋ฆฐ ์œ ํ˜•์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

@denisname ๐Ÿ’ฏ @gustavderdrache @ledragon ์ง€๋‚œ ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ๋ชจ๋“  ์ˆ˜๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ถ”์  ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”๋ฐ ๋ฒŒ์จ ํ›จ์”ฌ ๋” ์˜ˆ๋ป์š”! ์˜ˆ์œ ์ถ”์  ํ…Œ์ด๋ธ”์ด ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค :์Šค๋งˆ์ผ:

์˜ˆ์œ ์ถ”์  ํ…Œ์ด๋ธ”์ด ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—

์ „์ ์œผ๋กœ! ๊ฐœ์„ ๋œ ์œ ํ˜• ์ •์˜๋Š” ์ฆ๊ฑฐ์šด ๋ถ€์ž‘์šฉ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ธฐ์ˆ  ๋ถ€์ฑ„์˜ ์™„์„ฑ์„ ์œ„ํ•ด ์ง€๊ธˆ ๊ตฌ์ฒด์ ์ธ ์ •์˜๋ฅผ ๋‚ด๋ฆฌ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? d3-array ๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ. ๋‚˜๋Š” strictFunctionTypes in d3-transition ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  d3-selection ๊ณผ ํŒจ๋ฆฌํ‹ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. #25805๊ฐ€ ๋ณ‘ํ•ฉ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ATM์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•˜๋ฉด ์–ธ์ œ ํ•˜๋Š”์ง€ ๋ชจ๋‘ ์•Œ๋ ค์ค„๊ฒŒ

5.2.0 ๊ธ€๋กœ๋ฒŒ ๋ฒˆ๋“ค์— ์Šคํƒฌํ”„๋ฅผ ์ฐ์„ ์ˆ˜ ์žˆ๋„๋ก #25582 ์ž‘์—… ์ค‘

d3-hierarchy ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(strict ๋ฐ jsDoc).
d3-dsv ๋ฐ d3-fetch ๋„ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค(ts 2.3).

@denisname @tomwanzek @gustavderdrache
์ด๊ฒƒ์— ์ง‘์ค‘ํ•ด์•ผ ํ• ๊นŒ์š”, ์•„๋‹ˆ๋ฉด d3๋ฅผ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ• ๊นŒ์š”? ์šฐ๋ฆฌ๋Š” ์ด์ œ ๊ธ€๋กœ๋ฒŒ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด 5๊ฐœ์˜ ๋งˆ์ด๋„ˆ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค(๋ชจ๋“  ํ•˜์œ„ ํŒจํ‚ค์ง€๊ฐ€ 5.2.0 ์— ๋Œ€ํ•ด ์ค€๋น„๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ๊ธ€๋กœ๋ฒŒ ํŒจํ‚ค์ง€ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

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

์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋”๋Ÿฝํ˜€์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด D3.js๋กœ ๋Œ์•„๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ผ์ธ TypeScript ์ฃผ์„์ด D3์— ๋Œ€ํ•ด ๊ณ ๋ ค๋˜์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

/** <strong i="6">@type</strong> {SyncBailHook<Compilation>} */
shouldEmit: new SyncBailHook(["compilation"]),

webpack์—์„œ TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๋กœ JavaScript๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ํฐ ์žฅ์ ์€ ์‹ค์ œ ์ฝ”๋“œ ๋ฐ”๋กœ ์˜†์— ํƒ€์ดํ•‘ ์ •์˜๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
https://github.com/webpack/webpack/blob/master/lib/Compiler.js#L51

์•ˆ๋…•ํ•˜์„ธ์š” @phil-lgr์ž…๋‹ˆ๋‹ค.
์–ผ๋งˆ ์ „์— d3 ์ด์Šˆ ํŠธ๋ž˜์ปค์— ๋Œ€ํ•œ ํ† ๋ก ์ด ์žˆ์—ˆ๊ณ  ์šฐ์„  ์ˆœ์œ„ ๋ชฉ๋ก์˜ ๋งจ ์œ„์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์˜ˆ: Mike Bostock์€ ํƒ€์ดํ•‘๋ณด๋‹ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ–ˆ์Šต๋‹ˆ๋‹ค). ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ์ƒˆ๋กœ์šด ์ •๋ณด ๋•๋ถ„์— ๋‹ค์‹œ ์งˆ๋ฌธ์ด ์ œ๊ธฐ๋  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๊ทธ๋Ÿด ๊ฐ€๋Šฅ์„ฑ์€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@tomwanzek ์—์„œ ์ถ”์  ํ…Œ์ด๋ธ”์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

d3-array , d3-array , d3-dsv , d3-fetch ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ $ strictNullChecks strictFunctionTypes ๋ฐ TS 2.3 ์—ด์— โœ…๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. d3-fetch , d3-hexbin , d3-hierarchy , d3-interpolate , d3-quadtree , d3-queue , d3-request , d3-timer ๋ฐ d3-voronoi .

๋˜ํ•œ d3-color , d3-hexbin , d3-hierarchy , d3-interpolate ๋ฐ d3-quadtree $ ์— ๋Œ€ํ•ด $ JSDoc ์—ด์— โœ… ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”

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