TypeScript 2.1 is now available.

ProtoPie-3.0.0 작업 중인 2016년 12월 8일 TypeScript 2.1 이 릴리즈 되었습니다. 늦게나마 정리를 해보게 되었습니다.

1. keyof and Lookup Types

JavaScript 에서는 속성 이름을 매개 변수로 사용하는 API를 사용하는 것이 일반적이지만, 이러한 API 에서 발생하는 타입들의 관계는 표현할 수가 없습니다.

2. Mapped Types

3. Object Spread and Rest

2.1 버전부터 ‘ES2017 Spread 와 Rest 1 ‘ 를 지원합니다.
Array 에서 사용하듯이 2 Spread 와 Rest 를 사용할 수 있습니다.

작성하면서 그 동안 react 에서 state 를 props 로 넘겨줄때 많이 사용했기 때문에 이게 왜 새로운 스펙이지 싶었는데, 찾아보니 ‘babel-preset-react’ 와 ‘babel-preset-es2015’ 에는 해당 스펙이 들어있지 않았습니다. 현재는 state-3 에 ‘transform-object-rest-spread’ 라는 이름으로 포함되어 있었습니다. 무심코 ‘babel-preset-stage-0’ 까지 같이 사용하다보니 당연한줄 알았네요 ㅎㅎ 아무튼 객체의 copy, merge, pick apart (떼어내기) 에 상당히 편리합니다.

const original = {a: 'a', b: 'b'};
const copy = { ...original };
copy; // {a: 'a', b: 'b'}
const foo = {a: 'a', b: 'b'};
const bar = {x: 'x': y: 'y'};
const merged = { ...foo, ...bar };
merged; // {a: 'a', b: 'b', x: 'x', y: 'y'}
const obj = { a: 'a', y: 'y' };
const newObj = {...obj, x: 1, y: 2};
newObj; // {a: 'a', x: 1, y: 2}
let obj = { x: 1, y: 1, z: 1 };
let { z, ...obj1 } = obj;
obj1; // {x: 1, y: 1}

4. Downlevel Async Functions

5. Support for external helpers library (tslib)

6. Untyped imports

7. Support for --target ES2016, --target ES2017 and --target ESNext

컴파일러 옵션 3 중 기존 옵션인 ‘taget’ 옵션에 ‘ES2016’, ‘ES2017’, ‘ESNext’ 가 추가 되었습니다.
--target, -t 옵션으로 설정하며, Type 은 string 에 Default 는 ‘ES3’ 입니다.

  • Value 가 특정 버전으로 설정된 경우 해당 버전 이하의 스펙은 트랜스파일하지 않습니다.
    ES2016 -> ** operator 하지 않음.
    ES2017 -> async, await 하지 않음.
  • Value 가 ‘ESNext’ 이면 가장 최신의 제안된 스펙도 트랜스파일하지 않습니다.
    최신 제안된 스펙은 여기서 확인 가능합니다.

8. Improved any Inference

9. Better inference for literal types

10. Use returned values from super calls as ‘this’

11. Configuration inheritance

12. New --alwaysStrict

컴파일러 옵션 3--alwaysStrict가 새로 추가 되었습니다.
옵션의 Type 은 boolean 이고, Default 는 false 입니다.
--alwaysStrict 을 사용하면 다음과 같은 결과가 발생합니다.

  • 모든 코드를 ‘strict 모드’ 로 파싱합니다.
  • 모든 컴파일된 파일의 최상단에 'use strict';가 쓰여집니다.

원래 모듈 파일들은 자동적으로 ‘strict 모드’ 로 파싱되기 때문에, 이 옵션은 모듈이 아닌 코드에 사용하길 추천합니다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중