Đề xuất gõ tĩnh JavaScript

Static Typing là tính năng số một bị thiếu trong JavaScript, theo 16 nghìn nhà phát triển tham gia cuộc thi. Có rất nhiều ý kiến ​​và cuộc thảo luận xung quanh vấn đề này, đến nỗi TC39, ủy ban chuẩn hóa ngôn ngữ JavaScript đã đưa ra đề xuất Giai đoạn 0 mới để cho phép các nhà phát triển JavaScript thêm chú thích loại vào mã JavaScript của họ

Đề xuất gõ tĩnh JavaScript

Hãy hiểu điều gì đang xảy ra và tại sao điều này có thể có tác động lớn đến cách chúng ta viết JavaScript

Một Chút Lịch Sử. TypeScript, JavaScript và các khái niệm

Khi JavaScript được phát hành lần đầu tiên cách đây 27 năm, nó được thiết kế để trở thành một ngôn ngữ động hoặc ngôn ngữ được gõ yếu, nghĩa là các nhà phát triển không thể chỉ định trước các loại thông tin sẽ được lưu trữ trong một biến. JavaScript chỉ định loại biến dựa trên thông tin được gán cho nó. (e. g. mảng, chuỗi, đối tượng, v.v.). Ngược lại là ngôn ngữ Strongly typed, trong đó việc chỉ định các kiểu trước được thực thi bởi trình biên dịch, chẳng hạn như Java, C# và Rust

Có một ngôn ngữ đánh máy yếu là một trải nghiệm buồn vui lẫn lộn

Phần thú vị là vì nó mang lại cho bạn rất nhiều tính linh hoạt và ít nỗ lực của nhà phát triển hơn khi trình biên dịch thực hiện một số loại chuyển đổi kiểu nhất định. Phần cay đắng là vì ít lỗi hơn được phát hiện trong thời gian biên dịch, để lại nhiều lỗi bị phát hiện trong thời gian chạy

Ngôn ngữ gõ yếu cho phép những thứ như thế này. 1 + “1” = 11

Và những lỗi như thế này.

let x: string;

x = "Using annotations";
4

Cũng như các lỗi tương tự khác và những thứ kỳ lạ có thể ngăn chặn được bằng cách thêm cú pháp loại. Đó là lý do tại sao TypeScript được phát minh

JavaScript + Các loại = TypeScript

TypeScript là một siêu bộ JavaScript, nghĩa là bạn hoàn toàn có thể viết JavaScript hợp lệ mà không cần sử dụng bất kỳ tính năng bổ sung nào mà Typescript cung cấp. Bạn có thể xây dựng dựa trên JavaScript bằng cách thêm cú pháp cho khai báo kiểu, lớp và các tính năng khác bằng kiểm tra kiểu

Nói cách khác, Bản mô tả là ngôn ngữ kiểm tra kiểu không thay đổi cách trình duyệt diễn giải JavaScript

TypeScript được phát hành lần đầu tiên vào năm 2012 và “là ngôn ngữ lập trình được gõ mạnh dựa trên JavaScript, cung cấp cho bạn công cụ tốt hơn ở mọi quy mô”, hiện là ngôn ngữ phổ biến thứ bảy trong số các nhà phát triển theo và thứ tư theo

Đề xuất gõ tĩnh JavaScript

Việc sử dụng và áp dụng nó đã được mở rộng, theo cấp số nhân và bùng nổ. Nhưng, nó thực sự bắt đầu cất cánh vào năm 2017. Mức độ phổ biến của nó đã tăng lên bởi vì, bằng cách cung cấp cú pháp kiểm tra trên JavaScript, TypeScript cho phép các nhà phát triển gõ kiểm tra mã của họ, giúp tìm lỗi và cải thiện tài liệu về các cơ sở mã JavaScript lớn

Một số ý kiến ​​​​cho rằng TypeScript phải đối mặt với số phận tương tự như Coffeescript, bao gồm các cải tiến cho Ngôn ngữ JavaScript, chẳng hạn như vòng lặp

let x: string;

x = "Using annotations";
5. Những cải tiến đó sau đó đã được đưa vào chính ngôn ngữ JavaScript trong ES6, khiến CoffeScript không còn phù hợp. TypeScript, với tư cách là “siêu bộ” của JS, có thể trở nên không phù hợp nếu chính JavaScript áp dụng tất cả các cải tiến của TypeScript

Vì JavaScript là ngôn ngữ chung của web nên một thay đổi nhỏ có khả năng phá vỡ hàng triệu trang web và ứng dụng. May mắn thay, các thành viên TC39 luôn xem xét các tính năng hoàn toàn tương thích ngược

TypeScript tương thích với JavaScript đến mức nếu bạn thay đổi phần mở rộng tệp JavaScript cho

let x: string;

x = "Using annotations";
6, thì bùm. Bạn có một tệp TypeScript hợp lệ. Và, cú pháp loại bổ sung là tùy chọn. Bạn chỉ thêm nó nếu nó mang lại lợi ích cho bạn, không có gì lạ tại sao nó ngày càng phổ biến

Đề xuất gõ tĩnh JavaScript

Đi sâu vào đề xuất. Loại khai báo trong JavaScript

Mục đích chính của đề xuất là “Dành chỗ cho cú pháp kiểu tĩnh bên trong ngôn ngữ ECMAScript. Các công cụ JavaScript sẽ coi cú pháp loại là nhận xét”. TC39 Đề xuất có nghĩa là

Mọi thứ trong đề xuất này không có hành vi thời gian chạy và sẽ bị thời gian chạy JavaScript bỏ qua

Nhập Chú thích trong Biến và Hàm

Sử dụng chú thích loại, nhà phát triển có thể nêu rõ loại biến hoặc biểu thức (nếu đó là một chuỗi, loại, boolean…). Họ bắt đầu bằng dấu hai chấm. tiếp theo là loại. Kiểm tra ví dụ sau

let x: string;

x = "Using annotations";

Nếu

let x: string;

x = "Using annotations";
7 được gán cho một số
let x: string;

x = "Using annotations";
0, TypeScript sẽ báo lỗi. Tuy nhiên, công cụ JavaScript tuân theo đề xuất TC39. Kết quả sẽ không đưa ra lỗi vì chú thích tương đương với nhận xét. Họ không thay đổi ngữ nghĩa của chương trình

Vậy sự khác biệt là gì?

Chà, vì một bức tranh đáng giá ngàn lời nói, hãy xem cái này

Đề xuất gõ tĩnh JavaScript

[Chú thích trước và sau loại](https. //tc39. es/proposal-type-annotations/)

Điều này có nghĩa là khi bạn viết JavaScript với chú thích kiểu, nó sẽ không báo lỗi nữa. Ngay cả khi bạn nói rằng

let x: string;

x = "Using annotations";
7 là một chuỗi và bạn đã gán nó cho một số;

let x: string;

x = "Using annotations";

Hiện tại, một "plugin" là cần thiết trong một số công cụ nếu bạn muốn TypeScript hoạt động. Nhưng với đề xuất này, các công cụ này có thể hỗ trợ chú thích loại theo mặc định. Hỗ trợ TypeScript đầy đủ, có thể vẫn là chế độ chọn tham gia

Về cơ bản, tránh được việc chuyển đổi từ TypeScript sang JavaScript. Nếu bạn tạo một chương trình TypeScript, nó sẽ chạy mà không cần phiên mã

Bạn có thể có các chú thích được đặt trên các tham số bên trong một hàm, để chỉ định các loại mà hàm chấp nhận, chẳng hạn

function equals(x: number, y: number): boolean {
return x === y;
}

Trong trường hợp này, chỉ các số được chấp nhận làm tham số và giá trị trả về của hàm sẽ là boolean

Khai báo kiểu. Nhập bí danh

Bí danh loại bao gồm đặt cho một loại tên mới; . Nó có thể khai báo tên cho một tập hợp các loại rộng hơn. Đặt bí danh cho một kiểu nguyên thủy không thực tế lắm vì nó dễ dàng sử dụng các kiểu nguyên thủy, nhưng một trong những cách sử dụng tốt nhất là cho mục đích tài liệu

Thí dụ

type importantNumber = number;

Tất cả TypeScript sẽ được đề xuất này hỗ trợ chứ?

Câu trả lời ngắn. không. Chỉ các loại chính được hiển thị trong phần bên dưới. Ví dụ: enums, không gian tên và thuộc tính tham số lớp dường như không được hỗ trợ. Ngoài ra, việc chỉ định các đối số kiểu tại các trang gọi hàm có thể yêu cầu một cú pháp hơi khác

các loại các loại

:

  • Phong cách "nhận dạng" đơn giản.
    let x: string;

    x = "Using annotations";
    2
  • Thêm
    let x: string;

    x = "Using annotations";
    3
  • Thêm dấu ngoặc đơn sau mã định danh. .
    let x: string;

    x = "Using annotations";
    4
  • Bắt đầu bằng dấu ngoặc đơn.
    let x: string;

    x = "Using annotations";
    5

Có các loại khác được xem xét, nhưng hiện tại, các loại trên sẽ được hỗ trợ

Tùy chọn tham số

Khi khai báo tham số cho một hàm trong JavaScript, tất cả các tham số đều bắt buộc và nếu client không có giá trị cho tham số, họ có thể truyền giá trị “null” để thay thế. Nếu máy khách không chuyển bất kỳ giá trị nào (thậm chí không phải là null), các tham số sẽ được gán cho

let x: string;

x = "Using annotations";
6, đây có thể là nguồn gốc của lỗi. Tính tùy chọn của tham số có nghĩa là các tham số cho chức năng đó không bắt buộc, chúng là tùy chọn

Tham số Tùy chọn Cú pháp

Bạn chỉ cần thêm dấu chấm hỏi “?” . ” như trong ví dụ dưới đây

let x: string;

x = "Using annotations";
0

Trong trường hợp này, param2 là tùy chọn, param1 là bắt buộc

thuốc gốc

Generics là một trong những công cụ chính trong hộp công cụ để tạo các thành phần có thể tái sử dụng bằng các ngôn ngữ như C# hoặc Java, điều này có nghĩa là có thể tạo các thành phần hoạt động với nhiều loại thay vì chỉ một loại. Điều này có thể hữu ích theo cách người dùng có thể sử dụng các loại của riêng họ

Nếu bạn đã quen thuộc với TypeScript, đây là lúc bất kỳ loại nổi tiếng nào phát huy tác dụng

let x: string;

x = "Using annotations";
1

Bất kỳ loại nào là loại chung nhất. Ví dụ trên có nghĩa là hàm cho phép chỉ định các thuộc tính tùy ý, kể cả những thuộc tính không tồn tại. Tuy nhiên, chúng tôi đang mất thông tin về loại khi hàm trả về. Ví dụ: nếu chúng tôi vượt qua một

let x: string;

x = "Using annotations";
7, thông tin duy nhất chúng tôi có là đó là loại
let x: string;

x = "Using annotations";
8, không phải là một số

Có một cách để nắm bắt loại đối số mô tả những gì đang được trả về. sử dụng biến loại hoạt động trên các loại thay vì giá trị, mang lại cho chúng tôi loại an toàn

Cái gì tiếp theo?

Để đề xuất này được tích hợp hoàn toàn vào JavaScript, nó cần phải vượt qua bốn giai đoạn. Hiện tại đang ở giai đoạn đầu. chấp nhận để xem xét

Dưới đây là các giai đoạn của quy trình TC39

  • 🙋Giai đoạn 0. được đề xuất
  • Chấp nhận để xem xét
  • - chờ triển khai
  • 4. Đã được chấp nhận

Để biết thêm thông tin về cách thức hoạt động của quy trình, hãy truy cập tài liệu chính thức

Một số ý kiến ​​​​cho rằng Chú thích loại là tương lai và đề xuất này có thể sẽ được chấp nhận vì đây là một trong những tính năng được yêu cầu nhiều nhất (hoặc nhiều nhất) trong JavaScript

Một trong những đồng tác giả của đề xuất này, Gil Tayar, nói rằng nếu đề xuất này thành công

  1. Sẽ không còn phiên mã của hầu hết TS và Flow
  • Với ESM trình duyệt thực, có thể loại bỏ tất cả các công cụ trong quá trình phát triển
  1. Mã sẽ vẫn được kiểm tra bởi người kiểm tra bên thứ ba (TS và Flow)
  2. Hội tụ chậm TS/Flow không tương thích với cú pháp mới
  3. Dụng cụ sẽ trở nên đơn giản hơn rất nhiều
  4. Các hệ thống loại khác sẽ được thử nghiệm, nhưng sẽ mất thời gian, có thể là nhiều năm, nhưng sẽ rất đáng để chờ đợi

Giới thiệu về Fusebit

Tại Fusebit, chúng tôi sống và hít thở sự tích hợp. Nền tảng tích hợp thân thiện với nhà phát triển của chúng tôi áp dụng triết lý mã đầu tiên để hỗ trợ tính linh hoạt cao nhất trong việc giải quyết các tình huống tích hợp phức tạp. Nền tảng này giải quyết các thách thức tích hợp chung và hỗ trợ tạo các API thống nhất được tối ưu hóa riêng cho ứng dụng của riêng bạn và nhu cầu của khách hàng