์๋ ํ์ธ์,
TS ๋ฒ์ : 1.1
์ฃผ์ด์ง
function foo() {
var x = 10;
var y = 11;
}
์ฐ๋ฆฌ๋
function foo() {
var x = 10;
var y = 11;
}
์ ์ปดํ์ผ๋ฌ์์ ์ค ๋ฐ๊ฟ์ด ์์ต๋๋ค.
function foo() {
var x = 10;
var y = 11;
}
(๋ ์ปดํ์ผ๋ฌ ๋ชจ๋ ์ฒซ ๋ฒ์งธ ๋น ์ค์ ์ ๊ฑฐํ์ง๋ง ์ ์ปดํ์ผ๋ฌ๋ ํ ๋จ๊ณ ๋ ๋์๊ฐ์ต๋๋ค.)
์ด๋ ๋ธ๋ผ์ฐ์ ์์ JavaScript๋ฅผ ๋๋ฒ๊น ํ ๋ ๊ฒฝํ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
๋ฐฐ๊ฒฝ ์ ๋ณด ์ถ๊ฐ ... ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ชจ๋ ๋น ์ค์ ์ ๊ฑฐํ๋ ์ด์ ๋ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ _consistently_ ํ ์์๋ ์ ์ผํ ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋น ์ค ๋ณด์กด์ ์๋ฅผ ๋ค์ด ํด๋์ค ๋ฐ ๋ชจ๋ ์ ์ธ๊ณผ ๊ฐ์ด ์ฌ ์์ฑ์ด ํ์ํ ๊ตฌ์ฑ์ ๊ดํด์๋ ํญ์ ํํธ ๋๋ ๋ฏธ์ค ์ผ์ด ๋ ๊ฒ์ ๋๋ค. ๋๊ธ ๋ณด์กด๊ณผ ๋๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํฉ๋๋ค. ๊ทธ๋์ ์ ๊ฐ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์ ์ฌ์ ๋๋ผ์ง๋ง ์ฌ์ด ์ผ์ ์๋๋๋ค.
@NoelAbrahams ๋๋ฒ๊น ํ ๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
@ahejlsberg @NoelAbrahams ์ ๋ ์๋ CodePlex ํ๋ก์ ํธ์์ ๋ด ๋ณด๋ธ ํ๋กํ ํ์ ์ ๋ง๋ค์๋๋ฐ ์ค์ ๋ก ์ฃผ์๊ณผ ์ค ๋ฐ๊ฟ ๋ณด์กด์ผ๋ก ํ๋ฅญํ ์์ ์ ์ํํ์ต๋๋ค. ํฌ๊ฒ ์ฌ ์์ฑ๋ ๊ตฌ์กฐ (์ : ํจ์ ํํ์์ ๋ํ ํ์ดํ ํจ์)์์๋ ๊ฑฐ์ ํญ์ ์ง๊ด์ ์ผ๋ก ์์ํ๋ ์์ ์ ์ํํฉ๋๋ค.
์ค ๋ณด์กด์ ๋๋ถ๋ถ ์ด์ ์ฝ๋๋ฅผ ๋ณด์กด ํ ๋ ์ค ๋ฐ๊ฟ์ ์ฌ์ฌ์ฉํ๊ณ ๋ณํ์ ์ํ ํ ๋ ์๋ ๊ฐ๊ฒฉ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ฆ, ๋ค์์ด์๋ ๊ฒฝ์ฐ :
module M {
}
module N {
}
๊ทธ๋ฐ ๋ค์ 'N'์ ๋ํ IIFE๋ฅผ ๋ด๋ณด๋ผ ๋ "์ฐ๋ฆฌ๊ฐ ๋ค์ ์์ฑํ๋ ๋ชจ๋๊ณผ ์ด์ ๊ตฌ๋ฌธ ์์ ์ฌ์ด์ ํด์ฆ๋ฅผ ์ ์งํด์ผํฉ๋๋ค"๋ผ๊ณ ๋งํฉ๋๋ค.
๋ค์์ ๋์ ์์ค์ ์ถฉ์ค๋๋ก ์ฃผ์ / ๊ฐํ์ ๋ณด์กดํ๋ ์ด๋ฏธ ํฐ ํ๋กํ ํ์ ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ์ด์ / ์ดํ์ ๋๋ค.
https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter2/ecmascript5/Parser.ts
https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter2/ecmascript5/Parser.ts.expected
์ฌ๊ธฐ์์๋ ๋ง์ ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter/ecmascript5/
๋ด๊ฐ ๊ตฌํํ์ง ์์ ์ ์ผํ ๊ธฐ๋ฅ์ '์ ๋ ฌ'์ด์์ต๋๋ค. ์ฆ, ์๋ณธ์์ ์ด๋ค ๋ฐฉ์ ์ผ๋ก๋ ์ ๋ ฌ ๋ ์ฝ๋๊ฐ์๋ ๊ฒฝ์ฐ (๋งค๊ฐ ๋ณ์ ์ ์ธ์์ ๋งค์ฐ ์ผ๋ฐ์ ) ๋ด ๋ณด๋ธ ์ฝ๋๋์ด๋ฅผ ๋ณด์กดํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๋ ๊ฒํ๋ ๊ฒ์ ๋งค์ฐ ์ฌ์ํ ์ผ์ด์์ต๋๋ค.
์ฆ, TS์์ JS ๋ก์ ์ปจ์ค ํธ๋ญ ํธ ๋ณํ์ ๋ค์ฌ ์ฐ๊ธฐ๋ฅผ ๋ณด์กดํ๋ ค๊ณ ํ์ต๋๋ค. ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter/ecmascript5/ClassDeclaration/ClassDeclaration2.ts
https://typescript.codeplex.com/SourceControl/latest#tests/Fidelity/emitter/ecmascript5/ClassDeclaration/ClassDeclaration2.ts.expected
์ค์ฒฉ ๋ ๋ชจ๋๊ณผ ํด๋์ค๋ฅผ IIFE๋ก ๋ณํ ํ ํ์๋ ๋ฌธ์ด ์ด๋ป๊ฒ ์ ์ ํ๊ฒ ๋ค์ฌ ์ฐ๊ธฐ๋๋์ง (์ฌ๋ฌ ์ค์ ๊ฑธ์ณ์๋ ๊ฒฝ์ฐ์๋) ์ ์ํ์ญ์์ค.
@ahejlsberg , ๋ธ๋ผ์ฐ์ ์์ ๋๋ฒ๊น ํ ๋ ์ค์ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ค์ TypeScript ์์ค ์ฝ๋์ ์ ํํ ์ผ์นํ๋ ๊ฒฝ์ฐ JavaScript ์ฝ๋๋ฅผ ํ์ํ๊ณ ์ค๋จ ์ ์ ์ค์ ํ๊ธฐ์ํ ์ค์ ์ฐพ๋ ๊ฒ์ด ๋ ์ฌ์์ง๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋น ์ค์์ด ์ด ์ ์์์ง๋ง TS๋ _beautiful _ JavaScript (: smile :)๋ฅผ ๋ณด์กดํ๊ณ ๋ฐฉ์ถํ๊ธฐ ์ํด ๊ทธ๋ ๊ฒ
@ahejlsberg @NoelAbrahams ์ด ๋ํ์ ์ฝ๊ฐ ๊ด๋ จ๋ ๋ธ๋ผ์ฐ์ ์ ๋๋ฒ๊น ์ ์กด์ฌํ๋ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. setter / getter ์ฒด์ธ (์ : jquery) ๋๋ ์ฒด์ธ ์ฝ์์ ์ฌ์ฉํ ๋ ์ ์ค ๋ฐ๊ฟ์ ๋ฒ์ญ ์ค์ ์์ค๋ฉ๋๋ค. ์ฆ, Arrow ๊ธฐ๋ฅ์ผ๋ก ์์ ํ ๋ ํฐ ๊ณ ํต ํฌ์ธํธ์ ๋๋ค.
์๋ก์:
(<any> x).a('#test')
.b('test')
.c(() => 'foo')
.d(() => 'bar')
.e(() => 5)
.f(() => 6);
๋๋ค :
x.a('#test').b('test').c(function () { return 'foo'; }).d(function () { return 'bar'; }).e(function () { return 5; }).f(function () { return 6; });
Chrome ๋ฐ sourceMaps๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋จ ์ ์ ๊ณ์ ๊ฑด๋ ๋๋๋ค.
http://www.typescriptlang.org/Playground#src = (% 3Cany % 3E % 20x) .a ( '% 23test') % 0A % 20 % 20 % 20 % 20.b ( 'test') % 0A % 09.c (() % 20 % 3D % 3E % 20'foo ') % 0A % 09.d (() % 20 % 3D % 3E % 20'bar') % 0A % 09.e (() % 20 % 3D % 3E % 205) % 0A % 09.f (() % 20 % 3D % 3E % 206) % 3B
@mtraynham , ์ค์ ๋ก ๊ฐ์กฐํ๋ ๋ฌธ์ ๋ ์ฝ๊ฐ ๋ค๋ฅธ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด์ ๋ฒ์ ์์ ์ธ๋ผ์ธ ํจ์์ ๋ณธ๋ฌธ์ ํญ์ ์ ์ค์์ ๋ด๋ณด๋์ต๋๋ค.
// TS
var x = () => 'foo';
// JS - old
var x = function () {
return 'foo';
};
// JS - new
var x = function () { return 'foo'; };
๋๋ ์ด๊ฒ์ด ๋ฌธ์ ๋ผ๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ๋ธ๋ผ์ฐ์ ์์ ๋๋ฒ๊น
ํ ๋ ์ค๋จ ์ ์ ์ค์ ํ ์ ์๋๋ก ๊ฐ๋ ๋์๊ฐ์ function
๋ง๋ค์ด์ผํฉ๋๋ค.
@NoelAbrahams Ahh ์, ๋๊ฐ์ ์์ ์๋ฃจ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค ...
๋๋ ๋ณ๋์ ๋ฌธ์ ์ # 2259๋ฅผ ๋ง๋ค์์ต๋๋ค.
์ฐ๋ฆฌ์ ์๋ฐ ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ๋ฅผ ํ์ดํ โโ์คํฌ๋ฆฝํธ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ํ๊ตฌํ๋ ์์ง๋์ด๋ง ๋๋ ํฐ๋ก์ ์๋ก์ด ๋ผ์ธ ๊ธฐ๋ฅ์ด ์ ๋ง ๋์์ด ๋ ๊ฒ์ ๋๋ค. typescript์ ์ฃผ์ ๋งค๋ ฅ ์ค ํ๋๋ typescript generatedJavascript์์ ์์ฑ ๋ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋๋ค.
์ต๊ทผ ์ ๋ฐ์ดํธ ๋ฐ "--removeComments"๋ช ๋ น ์ค ์ง์๋ฌธ ์ถ๊ฐ์ ์ฃผ์์ด ์ ์ง๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋๋ ๋ํ @timjmartel ๊ณผ ๋น์ทํ ์ด์ ๋ก ์ด๊ฒ์ ์ข์ํฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ด ๋ณด๋ธ JS๊ฐ _nice_ ๋ณด์ด๋ฉด ์ฑํ์ ๋ํ ์ ํญ์ด ์ ์ต๋๋ค. (์ ์ด๋ ์์ง์ ์ธ) ๊ณต๋ฐฑ์ ๋ณด์กดํ๋ฉด ์ฝ๋๊ฐ ๊ธฐ๊ณ์ ์ํด ์์ฑ ๋ ๊ฒ๋ณด๋ค ๋ ์ธ๊ฐ์ด ์์ฑํ idomatic JS ์ฝ๋์ ๋น์ทํด ๋ณด์ ๋๋ค.
์ฐ๋ฆฌ ํ์ด TS๋ฅผ ๋ฒ๋ฆฌ๊ณ ๋์ ํธ๋์ค ํ์ผ ๋ JS๋ฅผ ๊ณ์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด ์ธ๊ฐ ์นํ์ ์ธ ๊ณต๋ฐฑ์ด ์๋ค๋ฉด ๋ฐฉ์ถ ๋ JS ์์ค๋ฅผ ์ฑํํ๋ ๊ฒ์ด ํจ์ฌ ์ฌ์ธ ๊ฒ์ ๋๋ค.
๋น ์ค๊ณผ ๊ด๋ จํ์ฌ, ์ง๊ธ ๋น์ฅ์ ํํธํ๊ฑฐ๋ ๋์น๋๋ผ๋ ๋ฐฉ์ถ ํ ์ ์์ต๋๊น? ์ด๋ฌํ ์คํ์ ๊ธฐ๋ฅ์ "--keepEmptyLines"์ต์ ์ ์ฌ์ฉํ์ฌ ์์ฒญํ ์ ์์ต๋๋ค. ์ข์ JS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ๋ ์ฝ๊ธฐ ์ฌ์ด JS๋ฅผ ์ฌ์ฉํ๊ธฐ์ํ ๊ฒ์ ๋๋ค.
์ฐ๊ฒฐ ํจ์ ํธ์ถ๊ณผ ๊ด๋ จํ์ฌ ์ฌ์ฉ์๊ฐ ์ค๋จ ์ ์ ์ค์ ํ ์ ์๋๋ก ํ ์ค์ ๋ํ ํธ์ถ์ ํ ์ ์์ต๋๊น? ๋ค์ ๋งํ์ง๋ง,์ด ๊ธฐ๋ฅ์ ๋ค๋ฅธ "์ ์ค ๋๋ ์คํจ"ํญ๋ชฉ ์ธ ๊ฒฝ์ฐ "--oneCallForLine"์ต์ ๊ณผ ํจ๊ป ์์ฒญํ ์ ์์ต๋๋ค.
์ฃผ๋ชฉ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ค์ ๋ก ์ฐ๊ฒฐ๋ ํจ์ ํธ์ถ์ ์์ค ์ฝ๋ ๋ฏธํ ์์ ์ํด ๋ถํ ๋ ์ ์์ผ๋ฏ๋ก ์ด๋ฌํ ๊ธฐ๋ฅ์ TypeScript์ ํฌํจํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์์ผํฉ๋๋ค. tsconfig.json์ ์ต์ ๋ง ์์ผ๋ฉด ์๋ฉ๋๋ค.
preserveWhitespace: true/false
?
๊ทธ๋ฌ๋ ๋๋ ์ด๊ฒ์ ์ปดํ์ผ๋ฌ ์ต์ ์ผ๋ก ๋ณด์ง ์๊ณ ์์ต๋๋ค : https://www.typescriptlang.org/docs/handbook/compiler-options.html
๋๋ ๊ณง ๊นจ๋ฌ์๋ค. ๊ณต๋ฐฑ์ ์ ์งํ์ง ์๋ ํ ๊ฐ์ง ์ข์ ์ด์ ๋ ์ค์๋ก .ts ๋์ .js๋ฅผ ํธ์งํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ ๊ฐ์งํด์ผ ํ ์ผ์ .js ํ์ผ์ ์ฝ๊ธฐ ์ ์ฉ / ์คํ ์ ์ฉ์ผ๋ก ์์ฑํ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ ๋ฌธ์ ๊ฐ๋์ง ์์ ์๋ ์์ต๋๋ค.
์ฆ, tsc๊ฐ .js ํ์ผ์ ์ฝ๊ธฐ ์ ์ฉ / ์คํ ์ ์ฉ์ผ๋ก ์์ฑํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.์ด๋ฅผ ์ํํ๋๋ก tsc๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์๋์, ์ง๊ธ์ ์๋๋๋ค. ๊ทธ๋๋ ๋ณ๋์ ๋ฌธ์ ๋ฅผ ์ด์ด๋ณด์ญ์์ค.
@DanielRosenwasser ์ฐ๋ฆฌ๊ฐ ๋ณ๋์ ๋ฌธ์ ๋ฅผ ์ด์ด์ผํ๋ ๊ณต๋ฐฑ์ ๋ณด์กดํ๊ณ ์ถ๋ค๋ฉด ๋น์ ์ ๋งํ๊ณ ์์ต๋๊น? ์ด ๋ฌธ์ ๊ฐ ์ถฉ๋ถํ์ง ์์ต๋๊น? LOL์ ํ ๋ฌ ์ด์ ์ ๊ฒฝ ์ฐ์ง ๋ง์ญ์์ค. ํธ๋์ค ํ์ผ ๋ ํ์ผ์ ๋ํ ์ฝ๊ธฐ / ์ฐ๊ธฐ / ์คํ ๊ถํ์ ๋ํด ๋ณ๋์ ๋ฌธ์ ๋ฅผ ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. :)
์ด๊ฒ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
+1
+1
+1
๊ตฐ์ค์ preserveWhitespace: true/false
์ํฉ๋๋ค
@ORESoftware ++
์ด๊ฒ์ด ์ค์ํ ์ด์ ๋ TypeScript๊ฐ JS๋ก "์ ์์ ์ผ๋ก ์ ํ"๋์ด์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ง๊ธ์ ์ ์ค์ ๋ณด์กด ํ ์ ์์ผ๋ฏ๋ก ํนํ TypeScript๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ JS๋ฅผ ์ฝ๊ธฐ์ ์ฝ๊ฐ ์กฐ๋ฐํ๊ฒ ๋ง๋ค ์ ์์ง๋ง JS๋ฅผ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ ๋ฌํด์ผํฉ๋๋ค.
+1 preserveWhitespace: true/false
esformatter ๋ฅผ ์ฌ์ฉํ์ฌ
๋ค์ ๊ตฌ์ฑ ํ์ผ ์ฌ์ฉ :
{
"lineBreak": {
"before": {
"FunctionDeclaration": ">=2",
"FunctionDeclarationOpeningBrace": 0,
"FunctionDeclarationClosingBrace": 1,
"MethodDefinition": ">=2",
"ClassDeclaration": ">=2"
},
"after": {
"FunctionDeclaration": ">=2",
"FunctionDeclarationOpeningBrace": 1,
"MethodDefinitionClosingBrace": ">=2",
"ClassClosingBrace": ">=2"
}
}
}
@mtraynham ๊ทํ์ ์ :
(<any> x).a('#test')
.b('test')
.c(() => 'foo')
.d(() => 'bar')
.e(() => 5)
.f(() => 6);
์ต์ ์ปดํ์ผ๋ฌ๋ก ๋ค์ JS๋ฅผ ์์ฑํฉ๋๋ค.
x.a('#test')
.b('test')
.c(function () { return 'foo'; })
.d(function () { return 'bar'; })
.e(function () { return 5; })
.f(function () { return 6; });
(TS PlayGround https://goo.gl/JViurr ์ฐธ์กฐ)
TS ๋ฒ์ 1.1 (์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ TypeScript ๋ฒ์ ) ์ดํ๋ก ๋ง์ ๊ฒ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๊น? ํธ์ ๋ด์ ๊ฐ๊ธฐ
@ valera-rozuvan ๋์ # 2259๋ฅผ ์ด์์ต๋๋ค. ๋ด ๋ฌธ์ ๋ ์ค ๋ฐ๊ฟ๊ณผ ๊ด๋ จ์ด ์์ง๋ง์ด ๋ฒ๊ทธ์์ ์ค๋ช ํ ๊ฒ๊ณผ ๋๊ฐ์ ๋ฌธ์ ๋ ์๋๋๋ค. # 2259๋ ์ ์ ๋์ ๋ซํ์ต๋๋ค (2015 ๋ 5 ์).
์ด๊ฒ์ bril-andrew esformatter ๊ตฌ์ฑ์ด์ง๋ง ๋ฒ๊ทธ๊ฐ ์์ ๋์์ต๋๋ค (ํด๋์ค ์ ์ธ์ ๋จ์ด import๊ฐ ํฌํจ ๋ ๊ฒฝ์ฐ ์ค ๋ฐ๊ฟ์ด ์์).
{
"lineBreak": {
"before": {
"FunctionDeclaration": ">=2",
"FunctionDeclarationOpeningBrace": 0,
"FunctionDeclarationClosingBrace": 1,
"MethodDefinition": ">=2",
"ClassDeclaration": ">=2",
"ExportNamedDeclaration": 2
},
"after": {
"FunctionDeclaration": ">=2",
"FunctionDeclarationOpeningBrace": 1,
"MethodDefinitionClosingBrace": ">=2",
"ClassClosingBrace": ">=2"
}
}
}
esformatter๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฒด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌผ๋ก ํจ์ ์ฃผ์์ ๋น ์ค์ ์๋์ผ๋ก ์ฝ์ ํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ ์๊ฒ๋ ํจ์ ๋ด์ ๋น ์ค์ด ํจ์ฌ ๋ ์ค์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฐ๋ฌธ์์ ๋ฌธ๋จ๊ณผ ๊ฐ์ ๋น ์ค์ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ ์๊ฐ์ ๊ทธ๋ฃนํํฉ๋๋ค.
ํจ์ ๋ด์ ๋น ์ค์ ํจ์์ ๊ตฌ์กฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค. ๊ทธ๊ฒ๋ค์ด ์์ผ๋ฉด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋๋ค.
@ahejlsberg ts- ๋๋ฉฐ์ด ๋ฌธ์ ๋ js ์ถ๋ ฅ์์ โโ๋น ์ค์ด ์ ๊ฑฐ๋์ด ๋ฐ์ํ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๋ง์ง๋ง js์์ด ์ค์ ๋จ๊ธฐ๋ ๊ฒ์ด ์ ๊ทธ๋ ๊ฒ ์ด๋ ค์ด์ง ๊ถ๊ธํฉ๋๋ค. ์ด๊ฒ์ ๋ํ ๋ ๋ง์ ์ ๋ณด๊ฐ ์์ต๋๊น? ์ด๋ฐ ์ผ์ด ์ผ์ด๋๋๋ก ์ด๋ป๊ฒ ๋์ ๋๋ฆด๊น์? :)
์๋๋ฉด ์ด๋ฏธ ๋ณํฉ๋์๊ณ ์์ง ์ถ์๋์ง ์์์ต๋๊น? -> V4 Next Big ๋ฒ์ # 3143
@JimTheMan ์์ค ๋งต์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ source-map-support
ํจํค์ง ๊ฐ ์ถ๋ ฅ์์ โโ์ฌ๋ฐ๋ฅธ ์คํ ์ถ์ ์ ์ป๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋๋ ๋ํ์ด ๋ฌธ์ ์ ๋ถ๋ช์ณค๋ค. diff ํจ์น๋ฅผ ๋ง๋ค๊ณ ํจ์น์ ๊ณต๋ฐฑ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆผ์ผ๋ก์จ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ต๋๋ค. jsdiff๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌ์กฐํ ๋ ํจ์น ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ํ๋๋๋ก ์กฐ์ ํ ์ ์์ต๋๋ค.
import * as diff from 'diff';
const patch =
diff.parsePatch(diff.createPatch('file', oldText, newText, '', ''));
const hunks = patch[0].hunks;
for (let i = 0; i < hunks.length; ++i) {
let lineOffset = 0;
const hunk = hunks[i];
hunk.lines = hunk.lines.map(line => {
if (line === '-') {
lineOffset++;
return ' ';
}
return line;
});
hunk.newLines += lineOffset;
for (let j = i + 1; j < hunks.length; ++j) {
hunks[j].newStart += lineOffset;
}
}
return diff.applyPatch(oldText, patch);
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์๋ณธ ํ์ผ์ ๋ชจ๋ ์ค ๋ฐ๊ฟ์ ์ ์งํ ์ ์์ต๋๋ค.
@zeroliu ์ปดํ์ผ ๋จ๊ณ์์ ๋์ ๋๋ ์๊ฐ ์ง์ฐ์ด ๋ฐ์ํฉ๋๊น?
@ahejlsberg ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น?
ํ๋ก์ ํธ์ ํฌ๊ธฐ์ ๋ฐ๋ผ @ valera-rozuvan. 100-1000 LOC์ 10 ๊ฐ ํ์ผ์ ํธ๋์ค ํ์ผํ๋ ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ ๋์ ๋๋ ์ง์ฐ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
์์ง ํด๊ฒฐ์ฑ ์ด ์๋์? ๋๋์ด ๊ณค๊ฒฝ์ ์ฒํด ...
๋ด ํ ๋๋ฃ @emadum ์ด tsc๊ฐ ์ฃผ์์ ๋ณด์กด ํ ์ ์๋ค๋ ๊ฒ์ ์๊ธฐ์์ผ
const gulp = require('gulp');
const ts = require('gulp-typescript');
const through = require('through2');
function preserveNewlines() {
return through.obj(function(file, encoding, callback) {
const data = file.contents.toString('utf8');
const fixedUp = data.replace(/\n\n/g, '\n/** THIS_IS_A_NEWLINE **/');
file.contents = Buffer.from(fixedUp, 'utf8');
callback(null, file);
});
}
function restoreNewlines() {
return through.obj(function(file, encoding, callback) {
const data = file.contents.toString('utf8');
const fixedUp = data.replace(/\/\*\* THIS_IS_A_NEWLINE \*\*\//g, '\n');
file.contents = Buffer.from(fixedUp, 'utf8');
callback(null, file);
});
}
gulp.task('default', function () {
return gulp.src('src/**/*.ts')
.pipe(preserveNewlines())
.pipe(ts({
removeComments: false
}))
.pipe(restoreNewlines())
.pipe(gulp.dest('lib'));
});
์ข ๋ ํ๋ช ํ ๋๊ธ์ด ์คํ์ ๋ง์ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ค๋๋ ์ฐ๋ฆฌ์๊ฒ๋ ์ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋น๊ต์ ์์ ํ์ผ์์๋ง ํ ์คํธํ์ง๋ง ์ฑ๋ฅ ์ค๋ฒ ํค๋๋ ์ต์ํ๋์์ต๋๋ค.
hth
๋ฟก๋ฟก
๋๋ ๊ฒฐ๊ตญ ๋น์ ์ ์์ด๋์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ๊ณ ๊ฒฐ๊ตญ npm ๋ชจ๋์ด ๋ ๋๊น์ง ํ์ฅํ์ต๋๋ค.
https://www.npmjs.com/package/gulp-preserve-typescript-whitespace
Readme์ ๊ทํ์ ๊ฒ์๋ฌผ์ ์ฌ๋ ธ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ตฐ์ค์
preserveWhitespace: true/false
์ํฉ๋๋ค@ORESoftware ++