Typescript: ๊ฐœ์ฒด ๋ณต์ œ

์— ๋งŒ๋“  2015๋…„ 02์›” 05์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/TypeScript

Stack Overflow (http://stackoverflow.com/questions/28150967/typescript-cloning-object)์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ๋” ๋ฌธ์„œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

typescript์—์„œ ๊ฐœ์ฒด๋ฅผ ๋ณต์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํ˜„์žฌ ๋‹ค์Œ ํ•ดํ‚น์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

var cloneObj = new this.constructor ();

๊ทธ๋Ÿฌ๋‚˜ typescript๋Š” ๋‹ค์Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ TS2351 : ํ˜•์‹์— ํ˜ธ์ถœ ๋˜๋Š” ๊ตฌ์„ฑ ์„œ๋ช…์ด์—†๋Š” ์‹์—๋Š” 'new'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Question

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

SO์—์„œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์บ์ŠคํŠธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ตœ์‹  ๋น„ํŠธ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ๋‹ค์Œ ์ดํ›„ ๋ชจ๋“  ๋ฒ„์ „์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

    var cloneObj = new (<any>this.constructor());
    var cloneObj = new (<any>this.constructor)();
    var cloneObj = new (<any>this).constructor();

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

ํ˜„์žฌ ๋‹ต๋ณ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ •ํ™•ํžˆ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์ œ๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋™์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

var cloneObj = new this.constructor(); // error TS2351: Cannot use 'new' with an expression whose type lacks a call or construct signature.

์ปดํŒŒ์ผ๋Ÿฌ 1.3์„ ํ–‰๋ณตํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€

var cloneObj = new (<any> this.constructor());

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ๋ฐฉ๋ฒ•์€ 1.4.1์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ์ž๋ฅผ ๋™์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

SO์—์„œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์บ์ŠคํŠธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ตœ์‹  ๋น„ํŠธ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ๋‹ค์Œ ์ดํ›„ ๋ชจ๋“  ๋ฒ„์ „์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

    var cloneObj = new (<any>this.constructor());
    var cloneObj = new (<any>this.constructor)();
    var cloneObj = new (<any>this).constructor();
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰