TypeScript'teki "tür" ayrılmış sözcük nedir?


107

TypeScript'te bir arayüz oluşturmaya çalışırken "tip" in bir anahtar kelime veya ayrılmış bir kelime olduğunu fark ettim. Aşağıdaki arabirimi oluştururken, örneğin, "tür", TypeScript 1.4 ile Visual Studio 2013'te mavi renkte gösterilir:

interface IExampleInterface {
    type: string;
}

Diyelim ki daha sonra arayüzü aşağıdaki gibi bir sınıfta uygulamaya çalışıyorsunuz:

class ExampleClass implements IExampleInterface {
    public type: string;

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

Arayüzün gerektirdiği özelliği uygulamak için "tip" kelimesini yazarken (üzgünüm), sınıfın ilk satırında IntelliSense, "typeof" veya "new" gibi diğer anahtar kelimelerle aynı simgeye sahip "type" ile görünür. ".

Etrafa bir göz attım ve TypeScript'te "tip" i "katı mod ayrılmış sözcük" olarak listeleyen bu GitHub sorununu bulabildim, ancak amacının gerçekte ne olduğu hakkında daha fazla bilgi bulamadım.

Beyin osuruğum olduğundan şüpheleniyorum ve bu zaten bilmem gereken açık bir şey, ama TypeScript'teki "tip" ayrılmış kelime ne için?


Type Aliastürlerinize anlamsal bir ad vermek için: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Yanıtlar:


132

"Tür takma adları" için kullanılır. Örneğin:

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

Referans: (düzenleme: eski bağ kaldırıldı) TypeScript Spesifikasyonu v1.5 (bölüm 3.9, "Tür Diğer Adlar", sayfa 46 ve 47)

Güncelleme : (düzenleme: eski bağlantı kaldırıldı) Şimdi 1.8 spesifikasyonunun 3.10 bölümünde. Güncellenen teknik özellik ve bağlantı için teşekkürler @RandallFlagg

Güncelleme : TypeScript El Kitabı , "Tür Takma Adları" araması sizi ilgili bölüme götürebilir.


29
Evet, yani bariz bir şeydi. Programlama dilleri bağlamında "tür" kelimesini aradığınızda, özellikle de söz konusu dil "TypeScript" olarak adlandırıldığında, aradığınızı bulmanın oldukça zor olduğu ortaya çıktı. Bu arada, genel sözlükler hala TypeScript'te mevcut değil mi?
Adam Goodwin

1
İhtiyacınız varsa işte bir tane (TS 0.9 ve üstü için):
Jcl

Teşekkürler, sanırım bu projeyi daha önce sözlük istediğimde görmüştüm, ama sonunda sadece onsuz yapmaya karar verdim.
Adam Goodwin

kavram typedef in ca'dan
Pranoy Sarkar

İlk iki bağlantı koptu. Lütfen güncelleyin, teşekkürler :)
Serkan Sipahi

33

Anahtar kelimeyi typecript'e yazın:

TypeScript'te type anahtar sözcüğü, bir tür için bir takma ad tanımlar. Kullanıcı tanımlı türleri tanımlamak için type anahtar sözcüğünü de kullanabiliriz. Bu en iyi bir örnekle açıklanır:

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;

Sen sayıl tipler (tiplerini oluşturabilirsiniz string, numbergibi değişmez değerler de, vs) ancak 1ya 'mystring'. Hatta başka kullanıcı tanımlı türler bile oluşturabilirsiniz. Örneğin tür madness, türlere sahiptir randomve coloriçinde.

Ardından, bir dizeyi değişmez hale getirmeye çalıştığımızda (ve IDE'mizde IntelliSense var), öneriler gösterir:

görüntü açıklamasını buraya girin

Tip çılgınlığının tür rengine sahip olmasından kaynaklanan tüm renkleri, rastgele türden türetilen 'rastgele' ve son 'foo'olarak, tip deliliğinin kendisinde bulunan dizeyi gösterir.


1
Kullanıcı tanımlı türler ve numaralandırılabilirler arasındaki fark nedir
ORcoder

1
@ORcoder iyi soru! Ben de bilmek istiyorum. Anlamamız için iyi bir açıklama!
Merv

type color = "blue" | "red" | "yellow" | "purple";sınıf içinde veya dışında ifadeleri nerede beyan ettiniz ?
Lalit Kushwah

Bu , kullanıcı tanımlı türler ve numaralandırmalar arasındaki fark konusunda yardımcı olabilir
Christophe Fuzier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.