1. 程式人生 > 其它 >TypeScript型別作為集合

TypeScript型別作為集合

型別作為集合

在 C# 或 Java 中,考慮執行時型別與其編譯時宣告之間的一一對應關係是有意義的。

在 TypeScript 中,最好將型別視為一組具有共同點的值因為型別只是集合,一個特定的值可以同時屬於多個集合。

一旦您開始將型別視為集合,某些操作就會變得非常自然。例如,在C#中,這是尷尬繞過一個值,或者一個stringint,因為沒有一個單一的型別,表示這種價值。

在 TypeScript 中,一旦您意識到每種型別都只是一個集合,這就變得很自然了。您如何描述屬於string集合或number集合的值?它只是屬於這些集合集:string | number

TypeScript 提供了許多以集合論方式處理型別的機制,如果您將型別視為集合,您會發現它們更直觀。

擦除的結構型別

在 TypeScript 中,物件不是單一的精確型別。例如,如果我們構造一個滿足介面的物件,即使兩者之間沒有宣告關係,我們也可以在需要該介面的地方使用該物件。

interface Pointlike { x: number; y: number; } interface Named { name: string; } function logPoint(point: Pointlike) { console.log("x = " + point.x + ", y = " + point.y); } function logName(x: Named) { console.log("Hello, " + x.name); } const obj = { x: 0, y: 0, name: "Origin", }; logPoint(obj); logName(obj);
嘗試

TypeScript 的型別系統是結構性的,而不是名義上的:我們可以將其obj用作 a,Pointlike因為它的xy屬性都是數字。型別之間的關係由它們包含的屬性決定,而不是它們是否以某種特定關係宣告。

TypeScript 的型別系統也沒有具體化:在執行時沒有任何東西可以告訴我們objPointlike.事實上,該Pointlike型別在執行時以任何形式存在

回到將型別作為集合的想法,我們可以將其obj視為PointlikeNamed集和值集的成員。