typescript稍微有點繞的高級類型

交叉類型 &

如果我們需要把兩個不同的對象合并為一個對象,則該對象為這兩個對象的交叉類型
# T & U
const mergeFunc = <T, U>(obj1: T, obj2: U) :T & U => {
  return Object.assign(obj1, obj2) as T & U;
}

聯(lián)合類型 |

如果我們需要一個函數(shù)接收number或者string類型,返回值為參數(shù)的長度,那么這個方法的參數(shù)就需要用聯(lián)合類型來描述
// string | number
const getLengthFunc = (content: string | number) : number => {
  if(typeof content === "string") return content.length;
  else {
    return content.toString().length;
  }
}

字面量類型

字面量類型中包括字符串字面量、數(shù)字字面量
字符串字面量
type str = "hello"
const name: str = "hello";
// 一旦指定了name的類型為str,那么它(name)只能用 'hello'作為變量name的值
type Direction = 'north' | 'west' | 'south' | 'east'
例:字符串字面量
數(shù)字字面量
type Age = 18;
interface Person {
  name: String,
  age: Age
}
const p1 : Person = {
  name: "any string",
  age: 18 // 這塊只能寫18
}
例:數(shù)字字面量

可辨識聯(lián)合

兩要素

1.具有普通的單例類型屬性(作為辨識特征)
2.一個類型別名包含了哪些類型的聯(lián)合

interface Square {
    kind: 'square',
    size: number
}
interface Rectangle {
    kind: 'rectangle',
    width: number,
    height: number
}
interface Circle {
    kind: 'circle',
    radius: number
}

type Shape = Square | Rectangle | Circle

const getShapeArea = (s: Shape): number => {
    switch(s.kind) {
        case 'circle': return Math.PI * s.radius * s.radius;
        case 'rectangle': return s.width * s.height / 2;
        case 'square': return s.size * s.size;
    }
}
例:可辨識聯(lián)合

索引類型

1.索引類型查詢 keyof

interface info {
  name: string,
  age: number
}
let infoprop: keyof info;
// 那么infoprop就只能定義為 info接口下定義的字段
infoprop = 'name'; // ok
infoprop = 'age'; // ok
infoprop = 'gender'; // error
例:索引類型

2.索引訪問操作符[]

通過 [] 索引類型訪問操作符, 我們就能得到某個索引的類型
索引類型訪問操作符.jpg
類型如果為null、undefined、never,則不會被訪問到
interface Type {
    a: string;
    b: never;
    c: boolean;
    d: number;
    e: object;
    f: null;
    g: undefined
  }
  type Test = Type[keyof Type];
let prop: Test = 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 交叉類型 交叉類型將多個類型合并為一個類型,相當(dāng)于新類型具有這多個類型的所有特性,相當(dāng)于是一種并的操作,通常在使用...
    這個前端不太冷閱讀 707評論 0 0
  • TypeScript的基礎(chǔ)類型、字面量類型、函數(shù)類型及接口類型,它們都是單一、原子的類型元素。其實,有一些稍微復(fù)雜...
    金融測試民工閱讀 3,092評論 1 0
  • 一、交叉類型 交叉類型將多個類型合并為一個新的類型,新的具有所有參與合并的類型的特性,本質(zhì)上是一種并的操作。形式如...
    kuxingseng686閱讀 647評論 0 0
  • 數(shù)字字面量類型 TypeScript還具有數(shù)字字面量類型。 function rollDie(): 1 | 2 |...
    2o壹9閱讀 876評論 2 50
  • 前面我們學(xué)的數(shù)字類型、字符串類型、布爾類型、數(shù)組類型等等可能都是我們比較熟悉的數(shù)據(jù)類型,在其他計算機語言中也能經(jīng)常...
    暖A暖閱讀 328評論 0 0

友情鏈接更多精彩內(nèi)容