精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

重新認識Typescript | Vue3源碼系列

開發 前端
本篇文章作為 Vue3 源碼系列前置篇章之一,Typescript 的科普文,主要目的為了大家在面對 Vue3 源碼時不會顯得那么不知所措,下來將介紹一些 Typescript 的基本使用。

[[342445]]

初次見面

官方對其只用了一句話來描述

TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any browser. Any host. Any OS. Open source.

大致意思為,TypeScript 是開源的,TypeScript 是 JavaScript 的類型的超集,它可以編譯成純 JavaScript。編譯出來的 JavaScript 可以運行在任何瀏覽器上。TypeScript 編譯工具可以運行在任何服務器和任何系統上

  • 問題: 什么是超集

超集是集合論的術語

說到超集,不得不說另一個,子集,怎么理解這兩個概念呢,舉個例子

如果一個集合A里面的的所有元素集合B里面都存在,那么我們可以理解集合A是集合B的子集,反之集合B為集合A的超集

現在我們就能理解為 Typescript 里包含了 Javascript 的所有特性,這也意味著我們可以將.js后綴直接命名為.ts文件跑到TypeScript的編繹系統中

Typescript 解決了什么問題

一個事物的誕生一定會有其存在的價值

那么 Typescript 的價值是什么呢?

回答這個問題之前,我們有必要先來了解一下 Typescript 的工作理念

本質上是在 JavaScript 上增加一套靜態類型系統(編譯時進行類型分析),強調靜態類型系統是為了和運行時的類型檢查機制做區分,TypeScript 的代碼最終會被編譯為 JavaScript

我們再回到問題本身,縮小一下范圍,Typescript 創造的價值大部分是在開發時體現的(編譯時),而非運行時,如

  • 強大的編輯器智能提示 (研發效率,開發體驗)
  • 代碼可讀性增強 (團隊協作,開發體驗)
  • 編譯時類型檢查 (業務穩健,前端項目中Top10 的錯誤類型低級的類型錯誤占比達到70%)

正文

本篇文章作為 Vue3 源碼系列前置篇章之一,Typescript 的科普文,主要目的為了大家在面對 Vue3 源碼時不會顯得那么不知所措,下來將介紹一些 Typescript 的基本使用。

變量申明

基本類型

  1. let isDone: boolean = false 
  2. let num: number = 1 
  3. let str: string = 'vue3js.cn' 
  4. let arr: number[] = [1, 2, 3]  
  5. let arr2: Array<number> = [1, 2, 3] // 泛型數組 
  6. let obj: Object = {} 
  7. let u: undefined = undefined; 
  8. let n: null = null

類型補充

  • 枚舉 Enum

使用枚舉類型可以為一組數值賦予友好的名字

 

  1. enum LogLevel { 
  2.   info = 'info'
  3.   warn = 'warn'
  4.   error = 'error'
  • 元組 Tuple

允許數組各元素的類型不必相同。比如,你可以定義一對值分別為 string和number類型的元組

  1. // Declare a tuple type 
  2. let x: [string, number]; 
  3. // Initialize it 
  4. x = ['hello', 10]; // OK 
  5. // Initialize it incorrectly 
  6. x = [10, 'hello']; // Error 
  • 任意值 Any

表示任意類型,通常用于不確定內容的類型,比如來自用戶輸入或第三方代碼庫

 

  1. let notSure: any = 4; 
  2. notSure = "maybe a string instead"
  3. notSure = false; // okay, definitely a boolean 
  • 空值 Void

與 any 相反,通常用于函數,表示沒有返回值

 

  1. function warnUser(): void { 
  2.     console.log("This is my warning message"); 
  • 接口 interface

類型契約,跟我們平常調服務端接口要先定義字段一個理

如下例子 point 跟 Point 類型必須一致,多一個少一個也是不被允許的

 

  1. interface Point { 
  2.     x: number 
  3.     y: number 
  4.     z?: number 
  5.     readonly l: number 
  6. const point: Point = { x: 10, y: 20, z: 30, l: 40 } 
  7. const point2: Point = { x: '10', y: 20, z: 30, l: 40 } // Error  
  8. const point3: Point = { x: 10, y: 20, z: 30 } // Error  
  9. const point4: Point = { x: 10, y: 20, z: 30, l: 40, m: 50 } // Error  

可選與只讀 ? 表示可選參, readonly 表示只讀

 

  1. const point5: Point = { x: 10, y: 20, l: 40 } // 正常 
  2. point5.l = 50 // error 

函數參數類型與返回值類型

 

  1. function sum(a: number, b: number): number { 
  2.     return a + b 

配合 interface 使用

 

  1. interface Point { 
  2.     x: number 
  3.     y: number 
  4.  
  5. function sum({ x,  y}: Point): number { 
  6.     return x + y 
  7.  
  8. sum({x:1, y:2}) // 3 

泛型

泛型的意義在于函數的重用性,設計原則希望組件不僅能夠支持當前的數據類型,同時也能支持未來的數據類型

  • 比如

根據業務最初的設計函數 identity 入參為String

  1. function identity(arg: String){ 
  2.  return arg 
  3. console.log(identity('100')) 

業務迭代過程參數需要支持 Number

 

  1. function identity(arg: String){ 
  2.  return arg 
  3. console.log(identity(100)) // Argument of type '100' is not assignable to parameter of type 'String'

為什么不用any呢?

使用 any 會丟失掉一些信息,我們無法確定返回值是什么類型

泛型可以保證入參跟返回值是相同類型的,它是一種特殊的變量,只用于表示類型而不是值

語法 (arg:T):T 其中T為自定義變量

  1. const hello : string = "Hello vue!" 
  2. function say<T>(arg: T): T { 
  3.     return arg; 
  4. console.log(say(hello)) // Hello vue!  

泛型約束

我們使用同樣的例子,加了一個console,但是很不幸運,報錯了,因為泛型無法保證每種類型都有.length 屬性

  1. const hello : string = "Hello vue!" 
  2. function say<T>(arg: T): T { 
  3.  console.log(arg.length) // Property 'length' does not exist on type 'T'
  4.     return arg; 
  5. console.log(say(hello)) // Hello vue!  

從這里我們也又看出來一個跟any不同的地方,如果我們想要在約束層面上就結束戰斗,我們需要定義一個接口來描述約束條件

  1. interface Lengthwise { 
  2.     length: number; 
  3.  
  4. function say<T extends Lengthwise>(arg: T): T { 
  5.  console.log(arg.length) 
  6.     return arg; 
  7. console.log(say(1))  // Argument of type '1' is not assignable to parameter of type 'Lengthwise'
  8. console.log(say({value: 'hello vue!', length: 10})) // { value: 'hello vue!', length: 10 }  

交叉類型

交叉類型(Intersection Types),將多個類型合并為一個類型

  1. interface foo { 
  2.     x: number 
  3. interface bar { 
  4.     b: number 
  5. type intersection = foo & bar 
  6. const result: intersection = { 
  7.     x: 10, 
  8.     b: 20 
  9. const result1: intersection = { 
  10.     x: 10 
  11. }  // error 

聯合類型

交叉類型(Union Types),表示一個值可以是幾種類型之一。我們用豎線 | 分隔每個類型,所以 number | string | boolean表示一個值可以是 number, string,或 boolean

  1. type arg = string | number | boolean 
  2. const foo = (arg: arg):any =>{  
  3.     console.log(arg) 
  4. foo(1) 
  5. foo('2'
  6. foo(true

函數重載

函數重載(Function Overloading), 允許創建數項名稱相同但輸入輸出類型或個數不同的子程序,可以簡單理解為一個函數可以執行多項任務的能力

例我們有一個add函數,它可以接收string類型的參數進行拼接,也可以接收number類型的參數進行相加

  1. function add (arg1: string, arg2: string): string 
  2. function add (arg1: number, arg2: number): number 
  3.  
  4. // 實現 
  5. function add <T,U>(arg1: T, arg2: U) { 
  6.   // 在實現上我們要注意嚴格判斷兩個參數的類型是否相等,而不能簡單的寫一個 arg1 + arg2 
  7.   if (typeof arg1 === 'string' && typeof arg2 === 'string') { 
  8.     return arg1 + arg2 
  9.   } else if (typeof arg1 === 'number' && typeof arg2 === 'number') { 
  10.     return arg1 + arg2 
  11.   } 
  12.  
  13. add(1, 2) // 3 
  14. add('1','2') //'12' 

總結

通過本篇文章,相信大家對Typescript不會再感到陌生了

下面我們來看看在Vue源碼Typescript是如何書寫的,這里我們以defineComponent函數為例,大家可以通過這個實例,再結合文章的內容,去理解,加深Typescript的認識

  1. // overload 1: direct setup function 
  2. export function defineComponent<Props, RawBindings = object>( 
  3.   setup: ( 
  4.     props: Readonly<Props>, 
  5.     ctx: SetupContext 
  6.   ) => RawBindings | RenderFunction 
  7. ): { 
  8.   new (): ComponentPublicInstance< 
  9.     Props, 
  10.     RawBindings, 
  11.     {}, 
  12.     {}, 
  13.     {}, 
  14.     // public props 
  15.     VNodeProps & Props 
  16.   > 
  17. } & FunctionalComponent<Props> 
  18.  
  19. // defineComponent一共有四個重載,這里省略三個 
  20.  
  21. // implementation, close to no-op 
  22. export function defineComponent(options: unknown) { 
  23.   return isFunction(options) ? { setup: options } : options 

 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2016-12-13 15:41:40

JavaHashMap

2014-01-06 11:23:54

Mesos設計架構

2021-04-22 21:15:38

Generator函數生成器

2019-10-31 13:40:52

JavaPHP編程語言

2019-02-24 21:27:26

物聯網網關物聯網IOT

2016-11-07 11:34:28

數據可視化大數據

2021-05-26 10:40:28

Vue3TypeScript前端

2019-09-02 08:53:46

程序員

2021-11-11 05:00:02

JavaMmap內存

2017-01-03 17:22:16

公共云安全

2021-09-22 07:57:23

Vue3 插件Vue應用

2019-01-18 13:32:16

2022-10-09 11:46:55

機器人人工智能

2019-04-15 14:32:11

2015-03-19 10:15:54

程序員價值程序員價值

2010-10-22 11:10:24

軟考

2009-11-26 16:57:09

Cisco路由器ARP

2012-01-11 09:12:25

程序員

2012-06-26 11:11:44

架構師

2022-09-08 13:58:39

Spring高并發異步
點贊
收藏

51CTO技術棧公眾號

亚洲大尺度美女在线| 久久日韩精品一区二区五区| xxxxxxxxx欧美| 日韩成人精品视频在线观看| 2024最新电影免费在线观看 | 欧美成人激情在线| 国产免费a级片| 超级碰碰久久| 亚洲女同ⅹxx女同tv| 精品久久久久久乱码天堂| 免费看污视频的网站| 综合天天久久| 亚洲欧洲视频在线| 韩国三级丰满少妇高潮| 成人性生活视频| 亚洲欧美日韩国产中文在线| 美女黄毛**国产精品啪啪| 一级特黄aaa| 一区二区三区导航| 久久亚洲精品成人| 中文字幕一二三四区| 国产精品久久久久久久久久久久久久久 | 激情久久久久久久| 在线看福利67194| 国产精品日日摸夜夜爽| 国产亚洲精品精品国产亚洲综合| 亚洲观看高清完整版在线观看| 日韩三级电影| 亚州视频一区二区三区| 国产精品一区一区三区| 国产精品久久久久aaaa九色| 久久免费播放视频| 久久五月天小说| 亚洲欧美日韩国产成人| 精品国产免费久久久久久婷婷| 亚洲日本在线观看视频| 精品欧美aⅴ在线网站| 国产女人18毛片| 最新国产在线观看| 91在线云播放| 国产精品theporn88| 国产乱淫a∨片免费观看| 日韩精品一级中文字幕精品视频免费观看 | 99日韩精品| 不卡中文字幕av| 中文字幕观看av| 成人免费在线播放| 亚洲欧美在线一区| 国产制服丝袜在线| 久久九九热re6这里有精品| 欧美电影免费提供在线观看| 午夜大片在线观看| 亚洲在线资源| 欧美精品久久一区二区三区| 婷婷免费在线观看| 日韩制服一区| 欧美综合色免费| www.色就是色| 开心久久婷婷综合中文字幕 | 国产又大又长又粗| 蜜桃一区二区三区四区| 成人h片在线播放免费网站| 中文字幕人妻一区二区三区视频| 奇米亚洲午夜久久精品| 国产精品久久久久久av下载红粉 | 91精品国产色综合久久不卡蜜臀| 999精彩视频| h1515四虎成人| 欧美日韩极品在线观看一区| 99sesese| 日韩欧美久久| 亚洲国产精品久久久久| jizz日本免费| 欧美在线色图| 久久精品影视伊人网| 欧美人禽zoz0强交| 激情久久中文字幕| 57pao成人永久免费视频| 久久亚洲精品石原莉奈| 美腿丝袜亚洲三区| 亚洲综合第一页| 日本激情一区二区| 91老司机福利 在线| 天天爽天天狠久久久| 久久bbxx| 亚洲国产wwwccc36天堂| 91黄色小网站| 日韩国产大片| 日韩美一区二区三区| 日本xxxx裸体xxxx| 日韩av免费大片| 九九九久久国产免费| 日本一级片免费看| 免费成人美女在线观看| 亚洲资源在线看| 青青草超碰在线| 中文字幕亚洲欧美在线不卡| 亚洲 欧美 综合 另类 中字| 日韩福利一区| 日韩一区二区在线观看视频| 亚洲精品在线视频免费观看| 青青草原综合久久大伊人精品| 精品中文字幕视频| 波多野结衣在线观看一区| 国产一区二区三区四区五区入口| 精品在线视频一区二区| 欧美黄色激情| 欧美性猛交xxxx富婆| 亚洲男人天堂2021| 免费av一区二区三区四区| 久久久99免费视频| 国产精品一区二区三区四| 激情另类小说区图片区视频区| 国产在线精品一区二区三区》 | 久久夜色精品国产噜噜av小说| 在线不卡国产精品| 久久精品国产亚洲av高清色欲| 日本午夜一本久久久综合| 99在线观看视频网站| 成人三级黄色免费网站| 午夜久久久久久久久| 午夜影院免费版| 精品美女久久久| 久久久影视精品| 国产精品久久久久久免费| xfplay精品久久| www.好吊操| www.久久久.com| 亚洲午夜女主播在线直播| 日本少妇毛茸茸高潮| 国模无码大尺度一区二区三区| 日本高清一区| 一二三四视频在线中文| 精品毛片乱码1区2区3区| 国产精品嫩草影院俄罗斯 | 国产aⅴ爽av久久久久| 国产99久久| 2018国产精品视频| 欧美一级特黄aaaaaa大片在线观看| 国产精品久久久一本精品| 国产激情在线观看视频| 亚洲免费成人av在线| 97成人超碰免| 天堂av在线7| 婷婷中文字幕一区三区| av黄色一级片| 亚洲激情专区| 国产手机精品在线| 超碰在线资源| 精品处破学生在线二十三| 青青草免费av| 国产jizzjizz一区二区| 菠萝蜜视频在线观看入口| 久久的色偷偷| 欧美日韩成人精品| 亚洲成人av综合| 亚洲18色成人| 中文字幕 亚洲一区| 一区二区日韩免费看| 麻豆亚洲一区| 日韩一级二级| 日韩最新在线视频| 99国产揄拍国产精品| 一区二区三区四区av| 高清中文字幕mv的电影| 999在线观看精品免费不卡网站| 精品午夜一区二区| 欧美理论影院| 在线亚洲欧美视频| 一本一道精品欧美中文字幕| 亚洲欧美电影院| 麻豆短视频在线观看| 一区二区91| 翔田千里亚洲一二三区| 成人精品在线| 久久久久久久999| 久香视频在线观看| 欧美日韩在线一区二区| 成年人午夜剧场| 99久久99久久综合| wwwwww.色| 国产精品vip| 老牛影视免费一区二区| 成人在线观看免费播放| 欧美另类xxx| 欧洲伦理片一区 二区 三区| 精品视频资源站| 免看一级a毛片一片成人不卡| av亚洲精华国产精华精| 别急慢慢来1978如如2| 亚洲最大av| 精品999在线观看| 91精品美女| 欧美肥臀大乳一区二区免费视频| 日本中文字幕电影在线观看| 欧美日韩精品是欧美日韩精品| 欧美日韩在线国产| 久久亚洲免费视频| 亚洲色图欧美自拍| 亚洲男人影院| 国产人妻人伦精品| 国产欧美日韩| 动漫美女被爆操久久久| 最新欧美电影| 久久久久国产视频| 97在线观看免费观看高清| 色综合天天色| 欧洲av一区二区嗯嗯嗯啊| 欧美日韩精品亚洲精品| 国产午夜亚洲精品午夜鲁丝片| 亚洲综合在线一区二区| 久久精品国产清高在天天线| 国产一区二区三区播放| 欧美日韩国产免费观看视频| 国产精品久久久久久久久久直播| 97久久网站| 97香蕉久久超级碰碰高清版| 看黄网站在线| 亚洲欧美日韩精品| 国精产品乱码一区一区三区四区| 欧美日韩日日骚| 久久久久亚洲av成人毛片韩| 一片黄亚洲嫩模| 在线观看亚洲网站| 国产女同互慰高潮91漫画| 激情av中文字幕| 国内精品在线播放| 国产又猛又黄的视频| 国产一区91| 国产免费黄色小视频| 91精品国产成人观看| 亚洲高清在线观看一区| 久操精品在线| 久久天天狠狠| 色天天色综合| 好吊妞www.84com只有这里才有精品 | 97精品在线观看| 久久久久黄久久免费漫画| www.国产精品一二区| 成av人电影在线观看| 亚洲无亚洲人成网站77777| 四虎精品成人免费网站| 亚洲国产精品中文| 亚洲欧美国产高清va在线播放| 欧美一区午夜视频在线观看 | 婷婷激情一区| 热久久这里只有精品| 小草在线视频免费播放| 国内精品视频在线| 9999在线视频| 久久全球大尺度高清视频| 日韩一级在线免费观看| 91久久国产综合久久91猫猫| 91精品国产91久久久久久| 丁香花在线观看完整版电影| 欧美国产第二页| av福利在线导航| 91高清视频免费观看| 欧美大片免费高清观看| 国产精品成av人在线视午夜片 | 国产精品视频一区二区久久| 亚洲天堂第一页| yourporn在线观看视频| 色偷偷av一区二区三区| 麻豆网站在线观看| 欧美精品一区二区免费| 成人爽a毛片免费啪啪动漫| 国产69精品久久久久久| 欧美91看片特黄aaaa| 国产精品男人爽免费视频1| 欧美电影在线观看网站| 亚洲精品免费网站| avtt综合网| 欧美亚洲爱爱另类综合| 色综合色综合| 欧美激情亚洲天堂| 亚洲免费观看| 亚洲天堂网一区| 国产精品中文字幕欧美| 国模私拍在线观看| 国产三级欧美三级| 免费成年人视频在线观看| 亚洲国产精品一区二区www在线| 丰满少妇乱子伦精品看片| 在线观看一区二区视频| 91亚洲国产成人久久精品麻豆 | 国产视频网站在线| 日韩性生活视频| www.综合网.com| 国产成人精品午夜| 国产在线视频欧美一区| 久中文字幕一区| 亚洲午夜精品一区 二区 三区| 国产精品久久久久久久乖乖| 日本成人超碰在线观看| gogo亚洲国模私拍人体| 久久亚洲综合色| 丝袜 亚洲 另类 欧美 重口| 欧美日韩免费区域视频在线观看| 亚洲一线在线观看| 欧美精品一区二区久久婷婷| 在线观看免费黄视频| 国a精品视频大全| 国产成人亚洲一区二区三区| 国内精品久久国产| 99久久夜色精品国产亚洲1000部| 久久亚洲中文字幕无码| 久久99精品国产麻豆不卡| 欧美深性狂猛ⅹxxx深喉| 亚洲男同性视频| 青青国产在线视频| 亚洲第一精品自拍| 欧美成人视屏| 国产91色在线免费| 国产成人一二| 欧美性视频在线播放| 久久一区二区三区四区五区| 男人添女人荫蒂国产| 国产精品看片你懂得| 日日摸天天添天天添破| 欧美成人伊人久久综合网| porn亚洲| 国产xxx69麻豆国语对白| 国产色噜噜噜91在线精品| 在线视频一二三区| 日本网站在线观看一区二区三区| 天天插天天射天天干| 亚洲国产精品久久久久秋霞影院| 国产女人爽到高潮a毛片| 揄拍成人国产精品视频| 成人激情综合| 欧美精品欧美精品| 亚欧成人精品| 免费黄色三级网站| 亚洲成人在线观看视频| www.黄色片| 久久6精品影院| 欧美午夜在线播放| 日韩中文在线字幕| 久久av资源网| 小泽玛利亚一区| 8x福利精品第一导航| 日本电影在线观看网站| 国产精品夫妻激情| 精品国产一区探花在线观看| 无码人妻丰满熟妇区毛片| 久久天天做天天爱综合色| 欧美最猛黑人xxxxx猛交| 亚洲欧洲视频在线观看| 欧美日韩第一视频| 一级毛片精品毛片| 欧美黄色免费网址| 成人综合婷婷国产精品久久| 妺妺窝人体色www聚色窝仙踪| 91精品国产aⅴ一区二区| 免费大片在线观看www| 国产综合香蕉五月婷在线| 国产精品7m凸凹视频分类| 极品粉嫩美女露脸啪啪| 亚洲色图清纯唯美| www.黄色片| 97av在线视频| 神马影视一区二区| 在线观看av网页| 亚洲欧美偷拍另类a∨色屁股| 国产毛片一区二区三区va在线| 欧美大奶子在线| 久久97精品| 激情视频综合网| 国产精品毛片高清在线完整版| 国产美女精品视频国产| 欧美疯狂xxxx大交乱88av| 欧美黑白配在线| 天天碰免费视频| 亚洲欧美日韩国产一区二区三区| 亚洲爆乳无码一区二区三区| 91成人在线视频| 日韩欧美网址| 真实乱偷全部视频| 精品久久久一区二区| 成人动漫在线免费观看| 91夜夜未满十八勿入爽爽影院| 欧美三级乱码| 蜜桃精品成人影片| 欧美日本一道本| 888av在线视频| 亚洲va久久久噜噜噜久久狠狠| 国产精品一品视频| 亚洲精品午夜国产va久久成人| 日韩中文字幕欧美| av成人app永久免费| 日韩精品无码一区二区三区免费| 中文字幕一区三区| 五月色婷婷综合| 成人国产精品日本在线| 亚洲激情欧美| 天堂а√在线中文在线鲁大师| 亚洲国产第一页| 亚洲成人高清| 亚洲成熟丰满熟妇高潮xxxxx|