国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

typescript高級(jí)類型部分代碼記錄

jsummer / 974人閱讀

摘要:都支持嵌套寫法寫法寫法有趣的寫法常量的寫法與交叉數(shù)據(jù)類型用法獲取對(duì)象的屬性升級(jí)版用法這種的聯(lián)合類型可以使用來循環(huán)值只能為用法二和與字符串索引簽名進(jìn)行交互。

interface type 都支持嵌套寫法
// interface 寫法
interface Ip {
  name: string;
  child?: Ip;
}

let child: Ip = {
  name: "str",
  child: {
    name: "test"
  }
};

// type 寫法
type Ip = {
  name: string;
  child?: Ip;
};

let child: Ip = {
  name: "child",
  child: {
    name: "haha"
  }
};
// 有趣的寫法
type LinkedList = T & { next: LinkedList }; // people = {name:"",next:{name:"",next:{...}}}
interface Person {
  name: string;
}
var people: LinkedList;
var s = people.name;
var s = people.next.name;
var s = people.next.next.name;
var s = people.next.next.next.name;

常量的寫法 與 交叉數(shù)據(jù)類型

interface I {
  name: "ccc";
}
interface P {
  age: "bbb";
}

var a: I & P = {
  name: "ccc",
  age: "bbb"
};

keyof 用法

// 獲取對(duì)象的屬性
function pluck(o: T, names: K): T[K] {
  return o[names];
}

// 升級(jí)版
function pluck1(o: T, names: K[]): T[K][] {
  return names.map(item => o[item]);
}

// keyof用法
interface Personal {
  name: string;
  age: number;
}
//keyof Personal ==> "name" | "age" 這種的聯(lián)合類型 可以使用in來循環(huán)
let ppp: keyof Personal = "name";
let ppp1: keyof Personal = "age";
let ppp2: keyof Personal = "ss"; // error 值只能為 name | age

keyof 用法二
keyof 和 T[K]與字符串索引簽名進(jìn)行交互。 如果你有一個(gè)帶有字符串索引簽名的類型,那么 keyof T 會(huì)是 string。 并且 T[string]為索引簽名的類型

interface Map1 {
  [key: number]: T;
}
let pp: keyof Map1; // pp 類型為number
let pp4: Map1[0]; // 返回的類型是string

interface Map2 {
  [key: string]: T;
}
let pp1: keyof Map1; // pp1 類型為string
let pp3: Map2["foo"]; // 返回的類型是number

keyof 用法 3 映射類型

// 通過這個(gè)類型生成一個(gè)只讀版本 in 內(nèi)部使用了for---in循環(huán)
interface PersonPartial {
    name?: string;
    age?: number;
}
// 使用
type ReadonlyPersonPartial = {
    readonly [key in keyof PersonPartial]: PersonPartial[key]
}
let b: ReadonlyPersonPartial = {
    name: "string",
    age: 123
}

type Map2 = {
    [key in keyof PersonPartial]?: T;
}
var a: Map2 = {
    name: "123",
}

// 封裝一些通用的版本
type BeNull = {
    [P in keyof T]:T[P] | null
}

type BeEmpty = {
    [P in keyof T]?:T[P]
}

理解 extends in 相關(guān)的東西

interface a {
  name: string;
  age: number;
}
// T 相當(dāng)于上面有 name | age
// [key in T] 循環(huán) name age ,每一個(gè)key就是name age 那么 a[name],a[age] j
type b = { [key in T]: a[key] };
let c: b<"name" | "age"> = {
  name: "123",
  age: 12
};

內(nèi)置的 pick record exclude的理解 慢慢來吧

// pick  的作用是傳入一個(gè)接口,返回接口里面特定的字段類型
type Pick = {
    [P in K]: T[P];
};
interface b { 
    name: string,
    age:number
}
let cc: Pick = {
    name: "cc",
    age:123
}

// 傳入屬性,生成一個(gè)接口 生成一個(gè) name age 都是string的interface
type Record = {
    [P in K]: T;
};
let mmm: Record<"name" | "age", string> = {
    name: "ccc",
    age:"20"
}

// 排除相同的 extends 可以理解為 T 可以賦值給 U 可以賦值返回never 否則 返回 T
type Exclude = T extends U ? never : T;
interface a { 
    name:string
}
interface b { 
    name: string,
    age:number
}

interface c {
    name: string,
    age: number,
    hobby:any
}

// 這兩個(gè)東西表示出來了 是分開來搞的 首先 a extends b => a  b extends b=>never 所以返回的是 a
let nnn: Exclude // 返回 a 
let nnnn: Exclude // 返回 never  a extends a => never  b extends a b可以賦值給a 返回never
let ccc: Exclude 

let b: a extends b ? number : string  // a 不能賦值給 b 所以返回了string b的類型就是string
let nnn:Exclude // 排除相同的過后 剩下的就是 ‘a(chǎn)ge’  "name"|"age" extends "name"  難道是 name extends name , age extends name 分開來的 先這樣理解吧

type mm = "number" | "age";
type nn = "age"
let c: mm extends nn ? never : mm; // mm 不能賦值給 nn 所以返回值是 mm 并不是上面Exclude 返回的 age 這個(gè)可以理解為傳入泛型變量的時(shí)候ts 幫我們?nèi)パh(huán) extends(賦值了一下)

// 取出相同的
type Extract = T extends U ? T : never; // T 可以賦值給 U的話 表示的是T中的字段 U中肯定都存在 返回了 U。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/104445.html

相關(guān)文章

  • 【速查手冊(cè)】TypeScript 高級(jí)類型 cheat sheet

    摘要:官方文檔高級(jí)類型優(yōu)先閱讀,建議閱讀英文文檔。關(guān)鍵字這個(gè)關(guān)鍵字是在版本引入的在條件類型語句中,該關(guān)鍵字用于替代手動(dòng)獲取類型。源碼解釋使用條件判斷完成示例官方作用該類型可以獲得函數(shù)的參數(shù)類型組成的元組類型。 學(xué)習(xí) TypeScript 到一定階段,必須要學(xué)會(huì)高階類型的使用,否則一些復(fù)雜的場景若是用 any 類型來處理的話,也就失去了 TS 類型檢查的意義。 本文羅列了 TypeScript...

    LoftySoul 評(píng)論0 收藏0
  • 為vue3學(xué)點(diǎn)typescript, 解讀高級(jí)類型

    摘要:直達(dá)第一課體驗(yàn)第二課基礎(chǔ)類型和入門高級(jí)類型第三課泛型第四課解讀高級(jí)類型第五課什么是命名空間回顧第二課的時(shí)候?yàn)榱烁玫闹v解基礎(chǔ)類型所以我們講解了一部分高級(jí)類型比如接口聯(lián)合類型交叉類型本節(jié)課我會(huì)把剩余高級(jí)類型都講完知識(shí)點(diǎn)摘要本節(jié)課主要關(guān)鍵詞為自 直達(dá) 第一課, 體驗(yàn)typescript 第二課, 基礎(chǔ)類型和入門高級(jí)類型 第三課, 泛型 第四課, 解讀高級(jí)類型 第五課, 什么是命名空間(na...

    chuyao 評(píng)論0 收藏0
  • 為vue3學(xué)點(diǎn)typescript, 基礎(chǔ)類型和入門高級(jí)類型

    摘要:導(dǎo)航第一課體驗(yàn)第二課基礎(chǔ)類型和入門高級(jí)類型第三課泛型第四課解讀高級(jí)類型很重要這一節(jié)很重要可以說是的最核心部分這一節(jié)學(xué)完其實(shí)就可以開始用寫代碼了想想中的再看看標(biāo)題中的類型字所以請(qǐng)大家務(wù)必認(rèn)真什么是入門高級(jí)類型因?yàn)楦呒?jí)類型的內(nèi)容比較多但是有些基 導(dǎo)航 第一課, 體驗(yàn)typescript 第二課, 基礎(chǔ)類型和入門高級(jí)類型 第三課, 泛型 第四課, 解讀高級(jí)類型 很重要 這一節(jié)很重要, 可以說...

    Songlcy 評(píng)論0 收藏0
  • typescript 高級(jí)技巧

    摘要:會(huì)報(bào)錯(cuò),因?yàn)橹袥]有暴露此方法,可以最大限度的避免拼寫錯(cuò)誤在此之前,先看一個(gè)的錯(cuò)誤處理流程,以下是對(duì)進(jìn)行集中處理,并且標(biāo)識(shí)的過程在處,會(huì)編譯出錯(cuò),提示。 用了一段時(shí)間的 typescript 之后,深感中大型項(xiàng)目中 typescript 的必要性,它能夠提前在編譯期避免許多 bug,如很惡心的拼寫問題。而越來越多的 package 也開始使用 ts,學(xué)習(xí) ts 已是勢在必行。 以下是我在...

    venmos 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來學(xué)習(xí)一門新的編程語言吧!

    摘要:入門,第一個(gè)這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...

    caspar 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<