Apa yang dimaksud dengan kata cadangan "tipe" di TypeScript?

106

Saya baru saja memperhatikan ketika mencoba membuat antarmuka di TypeScript bahwa "tipe" adalah kata kunci atau kata yang dipesan. Saat membuat antarmuka berikut, misalnya, "type" ditampilkan dengan warna biru di Visual Studio 2013 dengan TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

Katakanlah Anda kemudian mencoba mengimplementasikan antarmuka di kelas, seperti ini:

class ExampleClass implements IExampleInterface {
    public type: string;

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

Di baris pertama kelas, saat Anda mengetik (maaf) kata "type" untuk mengimplementasikan properti yang dibutuhkan oleh antarmuka, IntelliSense muncul dengan "type" yang memiliki ikon yang sama dengan kata kunci lain seperti "typeof" atau "new ".

Saya telah melihat-lihat, dan dapat menemukan ini masalah GitHub yang mencantumkan "tipe" sebagai "kata khusus mode ketat" di TypeScript, tetapi saya belum menemukan informasi lebih lanjut tentang apa sebenarnya tujuannya.

Saya menduga saya mengalami kentut otak dan ini adalah sesuatu yang jelas seharusnya sudah saya ketahui, tetapi untuk apa kata "tipe" yang dipesan di TypeScript?

Adam Goodwin
sumber
Type Aliasuntuk memberi nama semantik pada tipe Anda: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Jawaban:

130

Ini digunakan untuk "alias tipe". Sebagai contoh:

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

Referensi: TypeScript Specification v1.5 (bagian 3.9, "Type Aliases", halaman 46 & 47)

Pembaruan : Sekarang di bagian 3.10 dari spesifikasi 1.8 . Terima kasih @RandallFlagg untuk spesifikasi dan tautan yang diperbarui

Pembaruan : TypeScript Handbook , pencarian "Type Aliases" dapat membawa Anda ke bagian yang sesuai.

Jcl
sumber
26
Ya, jadi itu sudah jelas. Ternyata cukup sulit untuk menemukan apa yang Anda cari saat Anda mencari kata "type" dalam konteks bahasa pemrograman - terutama jika bahasa yang dimaksud disebut "TypeScript". Ngomong-ngomong, kamus umum masih belum ada di TypeScript kan?
Adam Goodwin
1
Ini satu jika Anda membutuhkannya (untuk TS 0.9 ke atas):
Jcl
Terima kasih, saya rasa saya pernah melihat proyek itu sebelumnya ketika saya menginginkan kamus, tetapi pada akhirnya saya memutuskan untuk tidak melakukannya.
Adam Goodwin
konsep ini berasal dari typedef di ca periksa studytonight.com/c/typedef.php
Pranoy Sarkar
33

Ketik kata kunci dalam naskah ketikan:

Dalam skrip ketikan kata kunci type mendefinisikan alias untuk suatu tipe. Kita juga dapat menggunakan kata kunci tipe untuk mendefinisikan tipe yang ditentukan pengguna. Ini paling baik dijelaskan melalui contoh:

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;

Anda dapat membuat jenis jenis skalar ( string, number, dll), tetapi juga nilai-nilai literal seperti 1atau 'mystring'. Anda bahkan dapat membuat jenis jenis yang ditentukan pengguna lainnya. Misalnya tipe madnessmemiliki tipe randomdan colordi dalamnya.

Kemudian ketika kami mencoba membuat string literal milik kami (dan kami memiliki IntelliSense di IDE kami), itu menunjukkan saran:

masukkan deskripsi gambar di sini

Ini menunjukkan semua warna, yang mana jenis kegilaan berasal dari memiliki jenis warna, 'acak' yang berasal dari jenis acak, dan terakhir, string 'foo'yang ada pada jenis kegilaan itu sendiri.

Willem van der Veen
sumber
1
Apa perbedaan antara tipe yang ditentukan pengguna dan enumerabel
ORcoder
1
@ORcoder pertanyaan bagus! Saya ingin tahu juga. Penjelasan yang bagus untuk kita pahami!
Merv
di mana Anda telah menyatakan type color = "blue" | "red" | "yellow" | "purple";pernyataan di dalam atau di luar kelas?
Lalit Kushwah
Ini mungkin membantu terkait perbedaan antara tipe yang ditentukan pengguna dan enum
Christophe Fuzier