2016-02-26 21 views
16

Tiếp theo Angular2 Quickstart Guide chúng tôi được hướng dẫn để bao gồm es6-shim trong 2 nơi:Angular2 tại sao chúng ta cần es6-shim

1) index.html

<script src="node_modules/es6-shim/es6-shim.min.js"></script>

2) typings.json

"ambientDependencies": { 
    "es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#6697d6f7dadbf5773cb40ecda35a76027e0783b2" 
} 

Tôi đã có ấn tượng rằng chúng tôi đang biên dịch mã số es6 của chúng tôi xuống đến es5.

Configured trong tsconfig.json

{ 
    "compilerOptions": { 
    "target": "es5", 
    ... 

Nếu kết quả cuối cùng là trình duyệt đang tải es5, tại sao trình duyệt cần miếng chêm cho es6?

Trả lời

22

Kiểu chữ được sử dụng bởi trình soạn thảo của bạn để cung cấp cho bạn mã gợi ý/intellisense, và es6-shim.min.js là một mã mô phỏng các tính năng ES6 cho các trình duyệt ES5. Một số những tính năng này là Promise, Array.from() ...

Trong khi mã của bạn được dịch sang ES5, bạn cần bao gồm es6-shim vì vậy bạn có thể sử dụng những tính năng mới trong nó ... Hãy xem xét mã ES6 này:

let test1 =() => 123 + 456; 
let test2 = new Promise((resolve, reject) => {}); 

nó sẽ được dịch sang mã ES5:

var test1 = function() { return 123 + 456; }; 
var test2 = new Promise(function (resolve, reject) { }); 

nhưng không es6-shimPromise sẽ được undefined ...

+0

bạn có nghĩa là 'gợi ý/intellisense' được trình soạn thảo sử dụng es6-shim? –

+1

@PardeepJain Kiểu chữ từ 'es6-shim.d.ts' ... – Sasxa

+1

Và tính đến tháng 10 năm 2016, chúng hiện đang đề xuất lõi-js trên es6-shim trong sự khởi đầu nhanh chóng của chúng được tham chiếu bởi OP. – HDave

13

TypeScript không đi kèm với các polyfills tích hợp. Có một số tính năng mà nó không transpile, đây là nơi các polyfills như es-shim có sẵn.

Tệp định nghĩa TypeScript sẽ cung cấp cho bạn hỗ trợ gõ trong trình soạn thảo bạn đã chọn và es-shim sẽ cung cấp việc thực hiện chức năng mà TypeScript không 't transpile thành mã ES5.

Một vài trong số các tính năng đánh máy như vậy không transpile là:

  • Promises
  • Chức năng treo tắt của các đối tượng nguyên mẫu (Array.from(), Array.of(), Number.isInteger(), vv)
  • Mô-đun tải

Cách tiếp cận chung là:

Quy tắc chung là nếu có phát âm chuẩn/sane không có ảnh hưởng lớn, chúng tôi sẽ cố gắng hỗ trợ nó. Chúng tôi không thêm bất kỳ phương pháp hoặc cấu trúc dữ liệu thời gian chạy nào, mà chính xác hơn những gì core.js (hoặc bất kỳ pollyfil) phục vụ để làm.- source (TypeScript developer)

Các vấn đề liên quan