Từ dành riêng “type” trong TypeScript là gì?


104

Tôi chỉ nhận thấy khi cố gắng tạo một giao diện trong TypeScript rằng "type" là một từ khóa hoặc một từ dành riêng. Ví dụ: khi tạo giao diện sau, "loại" được hiển thị bằng màu xanh lam trong Visual Studio 2013 với TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

Giả sử rằng bạn sau đó cố gắng triển khai giao diện trong một lớp, như thế này:

class ExampleClass implements IExampleInterface {
    public type: string;

    constructor() {
        this.type = "Example";
    }
}

Trong dòng đầu tiên của lớp, khi bạn nhập (xin lỗi) từ "type" để triển khai thuộc tính theo yêu cầu của giao diện, IntelliSense sẽ xuất hiện với "type" có cùng biểu tượng với các từ khóa khác như "typeof" hoặc "new ".

Tôi đã xem xét xung quanh và có thể tìm thấy vấn đề GitHub này liệt kê "loại" là "từ dành riêng cho chế độ nghiêm ngặt" trong TypeScript, nhưng tôi không tìm thấy thêm thông tin nào về mục đích thực sự của nó.

Tôi nghi ngờ mình đang bị rắm não và đây là điều hiển nhiên mà tôi nên biết, nhưng từ dành riêng "type" trong TypeScript dùng để làm gì?


Type Aliasđể cung cấp cho các loại của bạn một tên ngữ nghĩa: basarat.gitbooks.io/typescript/content/docs/types/...
basarat

Câu trả lời:


128

Nó được sử dụng cho "loại bí danh". Ví dụ:

type StringOrNumber = string | number;
type DictionaryOfStringAndPerson = Dictionary<string, Person>;

Tham khảo: Đặc tả TypeScript v1.5 (phần 3.9, "Bí danh Loại", trang 46 & 47)

Cập nhật : Bây giờ trên phần 3.10 của thông số kỹ thuật 1.8 . Cảm ơn @RandallFlagg về thông số kỹ thuật và liên kết được cập nhật

Cập nhật : Sổ tay TypeScript , tìm kiếm "Type Aliases" có thể đưa bạn đến phần tương ứng.


24
Đúng vậy, đó là một cái gì đó hiển nhiên. Hóa ra là khá khó để tìm thấy những gì bạn đang tìm kiếm khi bạn tìm kiếm từ "type" trong ngữ cảnh của ngôn ngữ lập trình - đặc biệt khi ngôn ngữ được đề cập được gọi là "TypeScript". Nhân tiện, các từ điển chung vẫn không tồn tại trong TypeScript đúng không?
Adam Goodwin,

1
Đây là một nếu bạn cần (đối với TS 0.9 trở lên):
Jcl

Cảm ơn, tôi nghĩ rằng tôi đã xem dự án đó một lần trước đây khi tôi muốn có một cuốn từ điển, nhưng cuối cùng tôi quyết định làm mà không.
Adam Goodwin,

khái niệm xuất phát từ typedef trong ca kiểm tra này studytonight.com/c/typedef.php
Pranoy Sarkar

31

Nhập từ khóa vào bảng chữ:

Trong bảng chữ, từ khóa type xác định bí danh cho một kiểu. Chúng ta cũng có thể sử dụng từ khóa type để xác định các loại do người dùng xác định. Điều này được giải thích tốt nhất qua một ví dụ:

type Age = number | string;    // pipe means number OR string
type color = "blue" | "red" | "yellow" | "purple";
type random = 1 | 2 | 'random' | boolean;

// random and color refer to user defined types, so type madness can contain anything which
// within these types + the number value 3 and string value 'foo'
type madness = random | 3 | 'foo' | color;  

type error = Error | null;
type callBack = (err: error, res: color) => random;

Bạn có thể soạn các loại loại vô hướng ( string, number, vv), mà còn các giá trị văn chương như 1hay 'mystring'. Bạn thậm chí có thể soạn các loại kiểu khác do người dùng xác định. Ví dụ loại madnesscó các loại randomcolortrong đó.

Sau đó, khi chúng tôi cố gắng tạo một chuỗi theo nghĩa đen của chúng tôi (và chúng tôi có IntelliSense trong IDE của mình), nó sẽ hiển thị các đề xuất:

nhập mô tả hình ảnh ở đây

Nó hiển thị tất cả các màu, kiểu điên cuồng bắt nguồn từ việc có màu kiểu, 'ngẫu nhiên' bắt nguồn từ kiểu ngẫu nhiên và cuối cùng, chuỗi 'foo'nằm trên chính kiểu điên.


Sự khác biệt giữa các kiểu liệt kê và kiểu do người dùng xác định là gì
ORcoder 13/09 '19

1
@ORcoder câu hỏi hay! Tôi cũng muốn biết. Một lời giải thích tốt để chúng tôi hiểu!
Merv

nơi bạn đã khai báo các type color = "blue" | "red" | "yellow" | "purple";câu lệnh bên trong hay bên ngoài lớp?
Lalit Kushwah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.