คำสงวน "type" ใน TypeScript คืออะไร


107

ฉันเพิ่งสังเกตเห็นเมื่อพยายามสร้างอินเทอร์เฟซใน TypeScript ว่า "type" เป็นทั้งคำหลักหรือคำสงวน เมื่อสร้างอินเทอร์เฟซต่อไปนี้ตัวอย่างเช่น "type" จะแสดงเป็นสีน้ำเงินใน Visual Studio 2013 พร้อม TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

สมมติว่าคุณลองใช้อินเทอร์เฟซในคลาสดังนี้:

class ExampleClass implements IExampleInterface {
    public type: string;

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

ในบรรทัดแรกของคลาสขณะที่คุณพิมพ์ (ขออภัย) คำว่า "type" เพื่อใช้คุณสมบัติที่อินเทอร์เฟซต้องการ IntelliSense จะปรากฏขึ้นพร้อมกับ "type" ที่มีไอคอนเหมือนกับคีย์เวิร์ดอื่น ๆ เช่น "typeof" หรือ "new ".

ฉันได้ตรวจสอบแล้วและพบปัญหา GitHub นี้ซึ่งแสดงรายการ "type" เป็น "คำสงวนในโหมดเข้มงวด" ใน TypeScript แต่ฉันไม่พบข้อมูลเพิ่มเติมเกี่ยวกับวัตถุประสงค์ของมัน

ฉันสงสัยว่าฉันมีอาการสมองตดและนี่เป็นสิ่งที่ชัดเจนว่าฉันควรรู้อยู่แล้ว แต่คำสงวน "type" ใน TypeScript มีไว้เพื่ออะไร


Type Aliasตั้งชื่อความหมายให้กับประเภทของคุณ: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

คำตอบ:


132

ใช้สำหรับ "ประเภทนามแฝง" ตัวอย่างเช่น:

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

ข้อมูลอ้างอิง: (แก้ไข: ลบลิงก์ที่ล้าสมัย)ข้อมูลจำเพาะ TypeScript v1.5 (ส่วน 3.9 "ชื่อแทนประเภท" หน้า 46 และ 47)

อัปเดต : (แก้ไข: ลบลิงก์ที่ล้าสมัย)ตอนนี้อยู่ในส่วน 3.10 ของข้อกำหนด 1.8 ขอบคุณ @RandallFlagg สำหรับข้อมูลจำเพาะและลิงค์ที่อัปเดต

อัปเดต : TypeScript Handbookค้นหา "Type Aliases" จะพาคุณไปยังส่วนที่เกี่ยวข้อง


29
ใช่มันเป็นสิ่งที่ชัดเจน ปรากฎว่ามันค่อนข้างยากที่จะค้นหาสิ่งที่คุณต้องการเมื่อคุณค้นหาคำว่า "type" ในบริบทของภาษาโปรแกรมโดยเฉพาะอย่างยิ่งเมื่อภาษาที่เป็นปัญหาเรียกว่า "TypeScript" อย่างไรก็ตามพจนานุกรมทั่วไปยังไม่มีอยู่ใน TypeScript ใช่หรือไม่?
Adam Goodwin

1
นี่คือสิ่งที่คุณต้องการ (สำหรับ TS 0.9 ขึ้นไป):
Jcl

ขอบคุณฉันคิดว่าฉันเคยเห็นโครงการนั้นมาแล้วเมื่อฉันต้องการพจนานุกรม แต่ในที่สุดฉันก็ตัดสินใจที่จะทำโดยไม่ต้องทำ
Adam Goodwin

แนวคิดนี้มาจาก typedef ใน ca ตรวจสอบstudytonight.com/c/typedef.php
Pranoy Sarkar

สองลิงค์แรกเสีย โปรดอัปเดตขอบคุณ :)
Serkan Sipahi

33

พิมพ์คำสำคัญใน typescript:

ใน typescript คีย์เวิร์ด type กำหนดนามแฝงให้กับประเภท นอกจากนี้เรายังสามารถใช้คีย์เวิร์ด type เพื่อกำหนดประเภทที่ผู้ใช้กำหนด สิ่งนี้อธิบายได้ดีที่สุดผ่านตัวอย่าง:

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;

คุณสามารถเขียนประเภทประเภทสเกลาร์ ( string, numberฯลฯ ) แต่ยังของค่าที่แท้จริงเหมือนหรือ1 'mystring'คุณสามารถเขียนประเภทอื่น ๆ ที่ผู้ใช้กำหนดเองได้ เช่นประเภทmadnessมีประเภทrandomและcolorอยู่ในนั้น

จากนั้นเมื่อเราพยายามสร้างสตริงตามตัวอักษรของเรา (และเรามี IntelliSense ใน IDE ของเรา) จะแสดงคำแนะนำ:

ป้อนคำอธิบายภาพที่นี่

มันแสดงสีทั้งหมดซึ่งความบ้าคลั่งประเภทนี้เกิดจากการมีสีประเภท 'สุ่ม' ซึ่งได้มาจากการสุ่มประเภทและสุดท้ายคือสตริง'foo'ที่อยู่บนความบ้าคลั่งประเภทนั้นเอง


1
ความแตกต่างระหว่างประเภทที่ผู้ใช้กำหนดและตัวนับคืออะไร
ORcoder

1
@ORcoder คำถามที่ดี! ฉันอยากรู้ด้วย คำอธิบายที่ดีให้เราเข้าใจ!
Merv

คุณได้ประกาศtype color = "blue" | "red" | "yellow" | "purple";งบภายในหรือภายนอกชั้นเรียนที่ไหน?
Lalit Kushwah

สิ่งนี้อาจช่วยเกี่ยวกับความแตกต่างระหว่างประเภทที่ผู้ใช้กำหนดและ enums
Christophe Fuzier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.