Câu hỏi TypeScript là gì và tại sao tôi sử dụng nó thay cho JavaScript? [đã đóng]


Bạn có thể mô tả ngôn ngữ TypeScript là gì không?

Những gì nó có thể làm JavaScript hoặc thư viện có sẵn không thể làm, mà sẽ cho tôi lý do để xem xét nó?


1277
2017-10-02 16:37


gốc


Xem blog này: blogs.msdn.com/b/somasegar/archive/2012/10/01/… - Andreas
@ Lorenzo - bởi vì hỏi câu hỏi đúng là một nửa trận chiến, và đây là câu hỏi đúng. Đó là câu hỏi mọi người nên tự hỏi bản thân, khi phải đối mặt với một biến chứng công nghệ khác. TypeScript là một trong những điều hiếm hoi đó là tất cả các bên. - Peter Wone
Một số lưu ý ở đây: basarat.gitbooks.io/typescript/content/docs/why-typescript.html - basarat
Câu hỏi được đặt ra vào năm 2012, định nghĩa của một câu hỏi "tốt" là khác nhau, và tôi nghĩ đó là một điều tốt - chiliNUT
Tôi thích làm thế nào không ai thực sự trả lời câu hỏi của bạn. Họ chỉ trả lời phần đầu tiên. Tại sao một người nào đó muốn sử dụng hoặc không sử dụng TypeScript? Nó giống như mọi người chưa bao giờ chạm vào nó trước đây hoặc họ sợ thể hiện bất kỳ phán đoán nào về nó. - Andrew


Các câu trả lời:


Ban đầu tôi đã viết câu trả lời này khi Typecript vẫn còn   hot-off-the-ép. Năm năm sau, đây là một cái nhìn tổng quan OK, nhưng nhìn   tại Câu trả lời của Lodewijk dưới đây để biết thêm chiều sâu

Xem 1000ft ...

TypeScript là một siêu của JavaScript mà chủ yếu cung cấp các kiểu gõ, lớp và giao diện tĩnh tùy chọn. Một trong những lợi ích lớn là cho phép các IDE cung cấp một môi trường phong phú hơn để phát hiện các lỗi phổ biến khi bạn nhập mã.

Để có ý tưởng về ý của tôi, hãy xem Video giới thiệu của Microsoft về ngôn ngữ.

Đối với một dự án JavaScript lớn, việc áp dụng TypeScript có thể dẫn đến phần mềm mạnh hơn, trong khi vẫn có thể triển khai được ở nơi ứng dụng JavaScript thông thường sẽ chạy.

Nó là mã nguồn mở, nhưng bạn chỉ có Intellisense thông minh khi bạn gõ nếu bạn sử dụng một IDE được hỗ trợ. Ban đầu, đây chỉ là Visual Studio của Microsoft (cũng được ghi nhận trong bài đăng blog từ Miguel de Icaza). Những ngày này, các IDE khác cũng hỗ trợ TypeScript.

Có những công nghệ khác như thế không?

CoffeeScript, nhưng điều đó thực sự phục vụ một mục đích khác. IMHO, CoffeeScript cung cấp khả năng đọc cho con người, nhưng TypeScript cũng cung cấp khả năng đọc sâu cho công cụ thông qua kiểu gõ tĩnh tùy chọn (xem phần này bài đăng trên blog gần đây cho một chút phê bình hơn). Cũng có Dart nhưng đó là một thay thế đầy đủ cho JavaScript (mặc dù nó có thể tạo mã JavaScript)

Thí dụ

Ví dụ, đây là một số TypeScript (bạn có thể chơi với điều này trong Sân chơi TypeScript)

class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}  

Và đây là JavaScript nó sẽ sản xuất

var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();

Lưu ý cách TypeScript định nghĩa kiểu biến thành viên và tham số phương thức lớp. Điều này được loại bỏ khi dịch sang JavaScript, nhưng được sử dụng bởi IDE và trình biên dịch để phát hiện lỗi, giống như truyền một kiểu số tới hàm tạo.

Nó cũng có khả năng suy ra các loại không được khai báo rõ ràng, ví dụ, nó sẽ xác định greet() phương thức trả về một chuỗi.

Debugging Typescript

Nhiều trình duyệt và IDE cung cấp hỗ trợ gỡ lỗi trực tiếp thông qua các sourcemaps. Xem câu hỏi Stack Overflow này để biết thêm chi tiết: Gỡ lỗi mã TypeScript với Visual Studio

Bạn muốn biết thêm?

Ban đầu tôi đã viết câu trả lời này khi Typecript vẫn còn hot-off-the-presses. Kiểm tra Câu trả lời của Lodewijk cho câu hỏi này để biết thêm chi tiết hiện tại.


1024
2017-10-02 16:41



WebStorm cung cấp IntelliSense tốt đẹp trên TypeScript bây giờ và là đa nền tảng. - Radek
Vấn đề với các công cụ này là bạn không bao giờ có được hiệu suất đầy đủ từ javascript. Có, nó cung cấp khả năng đọc tốt nhưng mã được biên dịch đôi khi rất clunky. Bạn dựa vào một công cụ của bên thứ ba để viết javascript gốc, tôi nghĩ rằng đây không phải là cách để đi, nó giống như chuyển đổi một ngôn ngữ sang ngôn ngữ khác. Muốn thay đổi ngôn ngữ không phải là ngôn ngữ khác để cư xử như một ngôn ngữ khác mà bạn thích, điều đó thật ngu ngốc và ngớ ngẩn. ...... (kết thúc phần 1) ...... - Codebeat
@Erwinus: Bạn vẫn còn lập trình với assembler? - VikciaR
Không, @Erwinus, mã đó là tùy chọn. Bạn có thể dễ dàng viết phiên bản JavaScript đơn giản trong TypeScript. - thoughtrepo
@Erwinus Điểm của TypeScript là cung cấp việc kiểm tra kiểu thời gian biên dịch. Nếu bạn không thấy giá trị trong đó, điều đó hoàn toàn ổn. TypeScript đã được xác nhận là "thử nghiệm đơn vị đầu tiên của bạn". Có nhiều tài nguyên thảo luận việc kiểm tra kiểu tùy chọn có giá trị hay không và chi tiết hơn những gì chúng ta có thể làm ở đây. Tôi không cố gắng thuyết phục bạn về bất cứ điều gì, chỉ cần sửa một quan niệm sai lầm. - thoughtrepo


Mặc dù câu trả lời được chấp nhận là tốt, tôi cảm thấy nó thực sự không làm công lý TypeScript vào thời điểm này. Nó không phải là những ngày đầu nữa. TypeScript đang tìm kiếm nhiều sự chấp nhận hơn bây giờ với một số khung phổ biến được viết bằng TypeScript. Lý do tại sao bạn nên chọn TypeScript thay vì JavaScript là rất nhiều bây giờ.

Quan hệ với JavaScript

JavaScript được chuẩn hóa thông qua các tiêu chuẩn ECMAScript. Không phải tất cả các trình duyệt đang sử dụng đều hỗ trợ tất cả các tính năng của các tiêu chuẩn ECMAScript mới hơn (xem phần này bàn). TypeScript hỗ trợ các tiêu chuẩn ECMAScript mới và biên dịch chúng thành các mục tiêu ECMAScript (cũ) bạn chọn (mục tiêu hiện tại là 3, 5 và 6 [a.k.a. 2015]). Điều này có nghĩa là bạn có thể sử dụng các tính năng của ES2015 và hơn thế nữa, như mô-đun, hàm lambda, các lớp, toán tử lan truyền, phá hủy, ngày nay. Nó cũng bổ sung thêm kiểu hỗ trợ tất nhiên, không phải là một phần của bất kỳ tiêu chuẩn ECMAScript nào và có thể không bao giờ là do bản chất diễn dịch thay vì bản chất biên dịch của JavaScript. Hệ thống kiểu TypeScript tương đối phong phú và bao gồm: giao diện, enums, kiểu lai, generics, union và intersection types, access modifiers và nhiều hơn nữa. Các trang web chinh thưc của TypeScript cung cấp tổng quan về các tính năng này.

Quan hệ với các ngôn ngữ nhắm mục tiêu JavaScript khác

TypeScript có một triết lý độc đáo so với các ngôn ngữ khác biên dịch sang JavaScript. Mã JavaScript là mã TypeScript hợp lệ; TypeScript là một siêu của JavaScript. Bạn gần như có thể đổi tên .js tệp đến .ts và bắt đầu sử dụng TypeScript (xem "Khả năng tương tác JavaScript" bên dưới). Các tệp TypeScript được biên dịch thành JavaScript có thể đọc được, do đó việc di chuyển trở lại là có thể và sự hiểu biết về TypeScript được biên dịch không hề khó. TypeScript xây dựng trên những thành công của JavaScript trong khi cải thiện những điểm yếu của nó.

Một mặt, bạn có các công cụ chứng minh trong tương lai để lấy các tiêu chuẩn ECMAScript hiện đại và biên dịch nó xuống các phiên bản JavaScript cũ hơn với Babel là một phiên bản phổ biến nhất. Mặt khác, bạn có các ngôn ngữ có thể hoàn toàn khác với JavaScript nhắm mục tiêu JavaScript, như Coffeescript, Clojure, Dart, Elm, Haxe, ScalaJs và toàn bộ máy chủ khác (xem phần này danh sách). Những ngôn ngữ này, mặc dù chúng có thể tốt hơn so với nơi mà tương lai của JavaScript có thể dẫn đến, nhưng sẽ có nguy cơ không tìm đủ thông tin cho tương lai của chúng để được đảm bảo. Bạn cũng có thể gặp khó khăn hơn khi tìm kiếm các nhà phát triển có kinh nghiệm đối với một số ngôn ngữ này, mặc dù những ngôn ngữ bạn sẽ tìm thấy thường có thể nhiệt tình hơn. Interop với JavaScript cũng có thể liên quan nhiều hơn một chút, vì chúng bị loại bỏ xa hơn so với JavaScript thực sự là gì.

TypeScript nằm ở giữa hai thái cực này, do đó cân bằng rủi ro. TypeScript không phải là một sự lựa chọn nguy hiểm bởi bất kỳ tiêu chuẩn nào. Phải mất rất ít công sức để làm quen nếu bạn quen thuộc với JavaScript, vì nó không phải là một ngôn ngữ hoàn toàn khác, có hỗ trợ khả năng tương tác JavaScript tuyệt vời và gần đây nó đã thấy rất nhiều sự chấp nhận.

Tùy chọn gõ tĩnh và suy luận kiểu

JavaScript được nhập động. Điều này có nghĩa là JavaScript không biết loại biến là gì cho đến khi nó thực sự được khởi tạo vào thời gian chạy. Điều này cũng có nghĩa là nó có thể là quá muộn. TypeScript thêm hỗ trợ kiểu cho JavaScript. Lỗi được gây ra bởi giả định sai của một số biến của một loại nhất định có thể được loại trừ hoàn toàn nếu bạn chơi đúng thẻ (mức độ nghiêm ngặt khi bạn nhập mã của bạn hoặc nếu bạn nhập mã là tùy thuộc vào bạn).

TypeScript giúp việc nhập dễ dàng hơn một chút và ít rõ ràng hơn nhiều khi sử dụng suy luận kiểu. Ví dụ: var x = "hello" trong TypeScript giống như var x : string = "hello". Loại đơn giản được suy ra từ việc sử dụng nó. Ngay cả khi bạn không loại rõ ràng các loại, chúng vẫn ở đó để giúp bạn không làm điều gì đó mà nếu không sẽ dẫn đến lỗi thời gian chạy.

TypeScript được gõ tùy ý theo mặc định. Ví dụ function divideByTwo(x) { return x / 2 } là một hàm hợp lệ trong TypeScript có thể được gọi với bất kì loại tham số, mặc dù gọi nó với một chuỗi rõ ràng sẽ dẫn đến một thời gian chạy lỗi. Cũng giống như bạn đã quen với JavaScript. Điều này làm việc, bởi vì khi không có kiểu nào được gán rõ ràng và kiểu không thể suy ra, như trong ví dụ divideByTwo, TypeScript sẽ ngầm định gán kiểu any. Điều này có nghĩa là chữ ký kiểu của hàm dividByTwo sẽ tự động trở thành function divideByTwo(x : any) : any. Có một cờ trình biên dịch để không cho phép hành vi này: --noImplicitAny. Bật cờ này mang đến cho bạn mức độ an toàn cao hơn, nhưng cũng có nghĩa là bạn sẽ phải nhập nhiều hơn.

Các loại có chi phí liên quan đến chúng. Trước hết, có một đường cong học tập, và thứ hai tất cả, tất nhiên, bạn sẽ mất thêm một chút thời gian để thiết lập một codebase bằng cách sử dụng đánh máy đúng cách nghiêm ngặt. Theo kinh nghiệm của tôi, những chi phí này hoàn toàn xứng đáng với bất kỳ codebase nghiêm trọng nào mà bạn đang chia sẻ với người khác. Nghiên cứu quy mô lớn về ngôn ngữ lập trình và chất lượng mã trong Github gợi ý rằng "rằng các ngôn ngữ được gõ tĩnh nói chung ít bị lỗi hơn các loại động, và việc gõ mạnh đó tốt hơn là gõ yếu trong cùng một vấn đề".

Thật thú vị khi lưu ý rằng bài báo tương tự này phát hiện ra rằng TypeScript ít bị lỗi hơn sau đó JavaScript:

Đối với những người có hệ số dương, chúng ta có thể mong đợi rằng ngôn ngữ   được liên kết với, parisus ceteris, một số lượng lớn các lỗi sửa lỗi.   Các ngôn ngữ này bao gồm C, C ++, JavaScript, Mục tiêu-C, Php và   Python. Các ngôn ngữ Clojure, Haskell, Ruby, Scala, và TypeScript,   tất cả đều có hệ số tiêu cực ngụ ý rằng các ngôn ngữ này ít   có khả năng hơn mức trung bình để dẫn đến lỗi sửa lỗi.

Hỗ trợ IDE nâng cao

Trải nghiệm phát triển với TypeScript là một cải tiến lớn so với JavaScript. IDE được thông báo trong thời gian thực bởi trình biên dịch TypeScript trên thông tin kiểu phong phú của nó. Điều này mang lại một vài lợi thế lớn. Ví dụ, với TypeScript, bạn có thể thực hiện các phép tái cấu trúc một cách an toàn như đổi tên trên toàn bộ codebase của bạn. Thông qua hoàn thành mã, bạn có thể nhận trợ giúp nội tuyến về bất kỳ chức năng nào mà thư viện có thể cung cấp. Không cần phải nhớ chúng hoặc tìm kiếm chúng trong các tài liệu tham khảo trực tuyến. Lỗi biên dịch được báo cáo trực tiếp trong IDE với đường kẻ màu đỏ trong khi bạn đang bận mã hóa. Tất cả điều này cho phép tăng đáng kể năng suất so với làm việc với JavaScript. Người ta có thể dành nhiều thời gian hơn cho việc viết mã và gỡ lỗi thời gian ít hơn.

Có một loạt các IDE có hỗ trợ tuyệt vời cho TypeScript, như Visual Studio & VS code, Atom, Sublime và IntelliJ / WebStorm.

Kiểm tra nghiêm ngặt null

Lỗi thời gian chạy của biểu mẫu cannot read property 'x' of undefined hoặc là undefined is not a function thường được gây ra bởi các lỗi trong mã JavaScript. Trong số các loại TypeScript đã làm giảm xác suất của các loại lỗi xảy ra, vì người ta không thể sử dụng một biến mà không được biết đến trình biên dịch TypeScript (ngoại trừ các thuộc tính của any các biến đã nhập). Nó vẫn có thể mặc dù sử dụng sai một biến được đặt thành undefined. Tuy nhiên, với phiên bản 2.0 của TypeScript, bạn có thể loại bỏ tất cả các loại lỗi này cùng với nhau thông qua việc sử dụng các kiểu không nullable. Điều này hoạt động như sau:

Với kiểm tra nghiêm ngặt null được kích hoạt (--strictNullChecks trình biên dịch TypeScript sẽ không cho phép undefined được gán cho một biến trừ khi bạn khai báo một cách rõ ràng nó là kiểu nullable. Ví dụ, let x : number = undefined sẽ dẫn đến lỗi biên dịch. Điều này phù hợp hoàn hảo với lý thuyết loại, vì undefined không phải là một số. Người ta có thể xác định x là một loại tổng hợp number và undefined để sửa lỗi này: let x : number | undefined = undefined.

Khi một loại được biết là không có giá trị, nghĩa là loại đó có thể có giá trị null hoặc là undefined, trình biên dịch TypeScript có thể xác định thông qua phân tích kiểu dòng điều khiển dựa trên việc mã của bạn có thể sử dụng một biến an toàn hay không. Nói cách khác khi bạn kiểm tra một biến là undefined thông qua ví dụ như if tuyên bố trình biên dịch TypeScript sẽ suy ra rằng kiểu trong nhánh đó của luồng điều khiển của mã của bạn không còn rỗng và do đó có thể được sử dụng một cách an toàn. Đây là một ví dụ đơn giản:

let x: number | undefined;
if (x !== undefined) x += 1; // this line will compile, because x is checked.
x += 1; // this line will fail compilation, because x might be undefined.

Trong quá trình xây dựng hội thảo năm 2016 của TypeScript Anders Hejlsberg đã giải thích chi tiết và trình diễn tính năng này: video (từ 44:30 đến 56:30).

Biên soạn

Để sử dụng TypeScript, bạn cần một quá trình xây dựng để biên dịch mã JavaScript. Quá trình xây dựng thường chỉ mất một vài giây tùy thuộc vào kích thước của dự án của bạn. Trình biên dịch TypeScript hỗ trợ biên dịch gia tăng (--watch biên dịch cờ), để tất cả các thay đổi tiếp theo có thể được biên dịch ở tốc độ lớn hơn.

Trình biên dịch TypeScript có thể in thông tin bản đồ nguồn trong các tệp .js đã tạo hoặc tạo các tệp .map riêng biệt. Thông tin bản đồ nguồn có thể được sử dụng bằng cách gỡ lỗi các tiện ích như Chrome DevTools và các IDE khác để liên kết các dòng trong JavaScript với các dòng đã tạo chúng trong TypeScript. Điều này giúp bạn có thể thiết lập các điểm ngắt và kiểm tra các biến trong khi chạy trực tiếp trên mã TypeScript của bạn. Thông tin bản đồ nguồn hoạt động khá tốt, nó đã tồn tại từ rất lâu trước TypeScript, nhưng việc gỡ lỗi TypeScript thường không tuyệt vời như khi sử dụng JavaScript trực tiếp. Lấy this ví dụ như từ khóa. Do sự thay đổi ngữ nghĩa của this từ khóa xung quanh việc đóng cửa kể từ ES2015, this thực sự tồn tại trong thời gian chạy dưới dạng biến được gọi là _this(xem câu trả lời này). Điều này có thể gây nhầm lẫn cho bạn trong khi gỡ lỗi, nhưng nói chung không phải là vấn đề nếu bạn biết về nó hoặc kiểm tra mã JavaScript. Cần lưu ý rằng Babel bị loại vấn đề tương tự.

Có một vài thủ thuật khác mà trình biên dịch TypeScript có thể làm, như tạo ra mã chặn dựa trên trang trí, tạo mã tải mô-đun cho các hệ thống mô-đun khác nhau và phân tích cú pháp JSX. Tuy nhiên, bạn có thể sẽ yêu cầu một công cụ xây dựng bên cạnh trình biên dịch Typescript. Ví dụ nếu bạn muốn nén mã của bạn, bạn sẽ phải thêm các công cụ khác vào quá trình xây dựng của bạn để làm như vậy.

Có sẵn trình biên dịch TypeScript cho Webpack, Gulp, Tiếng càu nhàu và khá nhiều công cụ xây dựng JavaScript khác. Tài liệu TypeScript có một phần trên tích hợp với công cụ xây dựng bao gồm tất cả. A linter cũng có sẵn trong trường hợp bạn muốn kiểm tra thời gian xây dựng nhiều hơn. Ngoài ra còn có một số lượng lớn các dự án hạt giống ngoài kia sẽ giúp bạn bắt đầu với TypeScript kết hợp với một loạt các công nghệ khác như Angular 2, React, Ember, SystemJs, WebPack, Gulp, v.v.

Khả năng tương tác JavaScript

Vì TypeScript có liên quan chặt chẽ đến JavaScript nên nó có khả năng tương tác tuyệt vời, nhưng cần thêm một số công việc để làm việc với các thư viện JavaScript trong TypeScript. Định nghĩa TypeScript là cần thiết để trình biên dịch TypeScript hiểu rằng hàm gọi như _.groupBy hoặc là angular.copy hoặc là $.fadeOut không phải là những tuyên bố bất hợp pháp. Các định nghĩa cho các hàm này được đặt trong .d.ts các tập tin.

Định dạng đơn giản nhất mà một định nghĩa có thể thực hiện là cho phép một mã định danh được sử dụng theo bất kỳ cách nào. Ví dụ, khi sử dụng Lodash, một tệp định nghĩa một dòng declare var _ : any sẽ cho phép bạn gọi bất kỳ chức năng nào bạn muốn _, nhưng sau đó tất nhiên bạn vẫn có thể phạm sai lầm: _.foobar() sẽ là một cuộc gọi TypeScript hợp pháp, nhưng tất nhiên là một cuộc gọi bất hợp pháp vào thời gian chạy. Nếu bạn muốn hỗ trợ kiểu thích hợp và hoàn thành mã, tệp định nghĩa của bạn cần phải chính xác hơn (xem định nghĩa lodash Ví dụ).

Mô-đun Npm được đóng gói sẵn với các định nghĩa kiểu riêng của chúng được tự động hiểu bởi trình biên dịch TypeScript (xem tài liệu). Đối với hầu hết các thư viện JavaScript bán phổ biến khác không bao gồm các định nghĩa riêng của ai đó, đã có các định nghĩa kiểu có sẵn thông qua một mô-đun npm khác. Các mô-đun này được bắt đầu bằng "@ types /" và đến từ kho lưu trữ Github có tên DefinitelyTyped.

Có một báo trước: các định nghĩa kiểu phải khớp với phiên bản của thư viện bạn đang sử dụng tại thời gian chạy. Nếu không, TypeScript có thể không cho phép bạn gọi hàm hoặc dereferencing biến tồn tại hoặc cho phép bạn gọi hàm hoặc dereference biến không tồn tại, đơn giản vì các loại không khớp với thời gian chạy tại thời gian biên dịch . Vì vậy, hãy đảm bảo bạn tải đúng phiên bản của các định nghĩa kiểu cho phiên bản đúng của thư viện bạn đang sử dụng.

Thành thật mà nói, có một chút rắc rối cho điều này và nó có thể là một trong những lý do bạn không chọn TypeScript, nhưng thay vì đi cho một cái gì đó giống như Babel mà không bị phải nhận định nghĩa kiểu nào cả. Mặt khác, nếu bạn biết bạn đang làm gì, bạn có thể dễ dàng khắc phục bất kỳ loại sự cố nào do tệp định nghĩa không chính xác hoặc thiếu.

Chuyển đổi từ JavaScript sang TypeScript

Bất kì .js tệp có thể được đổi tên thành .ts và chạy qua trình biên dịch TypeScript để nhận được cú pháp giống như mã JavaScript như một đầu ra (nếu nó là cú pháp chính xác ở vị trí đầu tiên). Ngay cả khi trình biên dịch TypeScript bị lỗi biên dịch nó vẫn sẽ tạo ra .js tập tin. Nó thậm chí có thể chấp nhận .js tệp như đầu vào với --allowJs cờ. Điều này cho phép bạn bắt đầu với TypeScript ngay lập tức. Rất tiếc, các lỗi biên dịch có thể xuất hiện ngay từ đầu. Người ta cần phải nhớ rằng đây không phải là lỗi dừng hiển thị như bạn có thể được sử dụng với các trình biên dịch khác.

Các lỗi biên dịch mà người ta nhận được ngay từ đầu khi chuyển đổi một dự án JavaScript thành một dự án TypeScript là không thể tránh khỏi bởi bản chất của TypeScript. Kiểm tra TypeScript tất cả các mã cho tính hợp lệ và do đó nó cần biết về tất cả các hàm và biến được sử dụng. Vì vậy, các định nghĩa kiểu cần phải được đặt ra cho tất cả các lỗi nếu không thì các lỗi biên dịch sẽ bị ràng buộc xảy ra. Như đã đề cập trong chương trên, có khá nhiều khung JavaScript có .d.ts các tệp có thể dễ dàng có được khi cài đặt Gói DefinitelyTyped. Tuy nhiên, có thể bạn đã sử dụng một số thư viện không rõ ràng mà không có định nghĩa TypeScript nào có sẵn hoặc bạn đã điền một số JavaScript nguyên thủy. Trong trường hợp đó, bạn phải cung cấp các định nghĩa kiểu cho các bit này để các lỗi biên dịch biến mất. Chỉ cần tạo một .d.ts và bao gồm nó trong tsconfig.json's files mảng, để nó luôn được trình biên dịch TypeScript xem xét. Trong đó khai báo các bit mà TypeScript không biết về kiểu any. Một khi bạn đã loại bỏ tất cả các lỗi, bạn có thể dần dần giới thiệu gõ vào những phần theo nhu cầu của bạn.

Một số công việc trên (lại) cấu hình đường ống xây dựng của bạn cũng sẽ cần thiết để có được TypeScript vào đường ống xây dựng. Như đã đề cập trong chương về biên dịch có rất nhiều tài nguyên tốt và tôi khuyến khích bạn tìm kiếm các dự án giống sử dụng kết hợp các công cụ bạn muốn làm việc.

Trở ngại lớn nhất là đường cong học tập. Tôi khuyến khích bạn chơi xung quanh với một dự án nhỏ lúc đầu. Hãy xem nó hoạt động như thế nào, nó được xây dựng như thế nào, nó sử dụng nó như thế nào, cấu hình nó như thế nào, nó hoạt động như thế nào trong IDE của bạn, nó được cấu trúc như thế nào, sử dụng công cụ nào, vv. biết những gì bạn đang làm, nhưng nó có thể bực bội khi bạn không làm.

Nhận con nuôi

TypeScript là mã nguồn mở (Apache 2 được cấp phép, xem github) và được hỗ trợ bởi Microsoft. Anders Hejlsberg, kiến ​​trúc sư trưởng của C # đang dẫn đầu dự án. Đó là một dự án rất tích cực; nhóm TypeScript đã phát hành rất nhiều tính năng mới trong vài năm qua và rất nhiều tính năng tuyệt vời vẫn được lên kế hoạch (xem lộ trình).

bên trong Khảo sát nhà phát triển StackOverflow 2017 TypeScript là trình chuyển đổi JavaScript phổ biến nhất (vị trí thứ 9) và giành vị trí thứ ba trong thể loại ngôn ngữ lập trình được yêu thích nhất.


729
2018-01-27 21:23



"Mã JavaScript là mã TypeScript hợp lệ" - đây thực sự không phải lúc nào cũng đúng. Tôi có nghĩa là mã như nếu (1 === '1') {} cung cấp cho bạn một lỗi trong TS và trong JS không. Nhưng hầu hết thời gian, nếu mã JS được viết tốt thì đó là sự thật. - Maciej Bukowski
Nếu bạn đã mất thời gian sản xuất quý giá của bạn fretting trên một dấu chấm phẩy mất tích, viết trong Typescript sẽ là một cuộc sống tiết kiệm. - SoSufi
Typings đã không được chấp nhận, và thực hành tốt nhất hiện nay là chỉ npm (hoặc là yarn) install @types/foo. Bạn có thể cập nhật câu trả lời của mình không? - J F
TL; DR sẽ tiết kiệm trong câu trả lời này;) - Qback
@ NickHodges không sao, có 6 người khác có thể;) - Wayne Werner


TypeScript làm một cái gì đó tương tự như những gì ít hơn hoặc sass không cho CSS. Chúng là siêu bộ của nó, có nghĩa là mọi mã JS bạn viết đều là mã TypeScript hợp lệ. Ngoài ra, bạn có thể sử dụng các tính năng bổ sung khác mà nó thêm vào ngôn ngữ và mã được chuyển đổi sẽ là js hợp lệ. Bạn thậm chí có thể thiết lập phiên bản JS mà bạn muốn mã kết quả của bạn trên.

Hiện tại TypeScript là một bộ siêu ES2015, do đó có thể là một lựa chọn tốt để bắt đầu học các tính năng mới của js và chuyển đổi thành tiêu chuẩn cần thiết cho dự án của bạn.


54
2018-02-11 20:32



Bằng cách nào đó điều này đã giúp tôi hiểu rõ hơn một trong những câu trả lời được đánh giá cao. Tôi đoán tôi chỉ cần một câu trả lời TL, DR, ELI5. - TVann
TL tốt nhất; DR là trang của TS: "TypeScript là một phần siêu lớn của JavaScript được biên dịch thành JavaScript đơn giản". - Juan Mendes
Nó không trả lời "tại sao tôi nên sử dụng nó" mặc dù. Ở đây, tl; dr sẽ là: 1) Để thêm các kiểu tĩnh tùy chọn vào JavaScript. Các loại có thể giúp bắt lỗi tại thời gian biên dịch và tài liệu tốt hơn cho chương trình của bạn. 2) Bạn có thể viết Mới JavaScript (ES6 / ES7 / ESnext) và biên dịch nó trở lại ES5, cần thiết để hỗ trợ các trình duyệt cũ hơn; Tôi đã xây dựng thêm một chút tại tsmean.com/articles/vs/typescript-vs-javascript cho những người quan tâm đến hơn một tl; dr - bersling
"Mã được chuyển đổi sẽ là JS hợp lệ" - và đó là gót chân Achilles của TypeScript nếu bạn hỏi tôi. Nó có nghĩa là họ không thể thêm một số tính năng rất hữu ích cho JS; đáng chú ý nhất thời gian chạy loại kiểm tra. Đó là một chút khó chịu để có trình biên dịch loại thời gian an toàn chỉ để mất nó cho bất kỳ dữ liệu thời gian chạy được đọc từ I / O, hoặc bất cứ lúc nào mã transpiled của bạn được gọi là unsafely từ JS khác. - Jez


"Nguyên tắc cơ bản về TypeScript"- một khóa học video Pluralsight bởi Dan Wahlin và John Papa thực sự tốt, hiện tại (ngày 25 tháng 3 năm 2016) được cập nhật để phản ánh TypeScript 1.8, giới thiệu về Typecript.

Đối với tôi những tính năng thực sự tốt, bên cạnh những khả năng tốt đẹp cho intellisense, là các lớp học, giao diện, mô-đun, sự dễ dàng trong việc triển khai AMD và khả năng sử dụng trình gỡ rối Loại Visual Studio khi được gọi với IE.

Tóm tắt: Nếu được sử dụng như dự định, Typescript có thể làm cho lập trình JavaScript đáng tin cậy hơn và dễ dàng hơn. Nó có thể làm tăng năng suất của lập trình JavaScript đáng kể trên SDLC đầy đủ.


30
2017-12-27 04:18



SDLC là gì? AMD? - Oooogi
@Oooogi, SDLC == Vòng đời phát triển phần mềm. AMD == Định nghĩa mô-đun không đồng bộ. Cái sau là cụ thể cho JavaScript, trong khi cái cũ là khá chung chung trong phạm vi. - Dimitre Novatchev


Ecma script 5 (ES5) mà tất cả các trình duyệt hỗ trợ và biên dịch trước. ES6 / ES2015 và ES / 2016 đến năm nay với rất nhiều thay đổi để bật lên những thay đổi này có cái gì đó ở giữa mà nên quan tâm đến TypeScript như vậy. • TypeScript là các kiểu -> Có nghĩa là chúng ta phải định nghĩa kiểu dữ liệu của mỗi thuộc tính và phương thức. Nếu bạn biết C # thì Typecript rất dễ hiểu. • Lợi thế lớn của TypeScript là chúng tôi nhận dạng các vấn đề liên quan đến loại hình sớm trước khi đi vào sản xuất. Điều này cho phép kiểm tra đơn vị thất bại nếu có bất kỳ loại không khớp nào.


7
2018-06-06 12:14



Nó không phải là bạn hàng năm! .. họ đã thay đổi thông số kỹ thuật sau khi chờ đợi rất lâu - Subham Tripathi
... và, những thay đổi đó bạn có thể tương quan với Microsoft nhận được các ngón tay của nó trong đó. ;-) - Trober
@SubhamTripathi Nó rất nhiều Là mỗi năm. ES2015, ES2016, ES2017 và từ nay cho đến khi ngôn ngữ chết. Nó không phải hàng năm, trước năm 2015, nhưng hiện tại. Tìm kiếm "quy trình TC39" để tìm hiểu thêm. - daemonaka
Downvoted cho nhận xét C #. Tất cả các kiến ​​thức C # có thể áp dụng cho TypeScript chỉ có thể áp dụng bằng JavaScript (nghĩ các hàm bậc cao hơn) và không liên quan cụ thể đến TypeScript. - Aluan Haddad