effective typescript_初学typescript(一) - 来亦何哀
前言
ts有多火大家也知道,慚愧的是,我現(xiàn)在還對它不熟悉,今天就開始學習一下吧。
typescript的數(shù)據(jù)類型
相比于ES6的數(shù)據(jù)類型來說,typescript擁有了新的幾種數(shù)據(jù)類型,它們分別是void、any、never、元組、枚舉以及其它的一些高級類型。
在typescript中,我們定義一個變量時,需要指定它的類型(當然不指定的話ts也會進行類型推斷),它的寫法如下:
枚舉
一組有名字的常量的集合。
你可以把它當成一個通訊錄,在撥打電話的時候只需要記住人名就可以了,而不需要去記得它的電話號碼,而且電話號碼是經常變化的,而人名基本不會發(fā)生變化。
為什么使用枚舉?
我們可以使用枚舉定義一些帶名字的常量,也可以清晰地表達意圖或創(chuàng)建一組有區(qū)別的用例。
如下例子,我們寫了一個對角色進行判斷的方法:
但是它是存在問題的:
如果我們使用枚舉呢?我們可以這樣寫:
const enum RoleEnum{Reporter = 1,Developer,Maintainer,Owner,Guest }function initByRole(role: RoleEnum) {if (role === RoleEnum.Reporter || role === RoleEnum.Developer) {// do sth} else if (role === RoleEnum.Maintainer || role === RoleEnum.Owner) {// do sth} else if (role === ) {// do sth} else {// do sth} }枚舉有哪些?
enum Role {Reporter,Developer,Maintainer,Owner,Guest } enum Message {Success = '恭喜你,成功了',Fail = '抱歉,失敗了' }- 異構枚舉(不推薦)
從技術的角度來說,枚舉可以混合字符串和數(shù)字成員:
接口
這個接口可不是我們平時寫業(yè)務代碼時請求后臺數(shù)據(jù)的那個接口啊,那這個接口是什么呢?
接口是一系列抽象方法的聲明,是一些方法特征的集合,這些方法都應該是抽象的,需要由具體的類去實現(xiàn),然后第三方就可以通過這組抽象方法調用,讓具體的類執(zhí)行具體的方法。
簡單的說呢,就是它定義了一些屬性、函數(shù)、可索引和類的所需要遵守的規(guī)范,然后自己就相當于變成了一種類型,去對值所具有的結構進行類型檢查。
對象類型接口
interface List {id: number;name: string; }interface Result {data: List[] }function render(result: Result){((value) => {(value.id, value.name)}) }let result = {data: [{id: 1,name: 'A'},{id: 2,name: 'B'}] }render(result)這是一個打印數(shù)組對象id和name的方法,沒毛病,如果我們此時修改一下result的結構,增加一個變量:
let result = {data: [{id: 1,name: 'A',sex: 'male'},{id: 2,name: 'B'}] }ts不會報錯,因為TypeScript的核心原則之一是對值所具有的結構進行類型檢查。 它有時被稱做“鴨式辨型法”或“結構性子類型化”。就是說,如果一只鳥,看起來像鴨子,游起來像鴨子,叫起來像鴨子,那這只鳥就可以被認為是鴨子。
我們只要傳入的對象滿足接口的必要條件,就是被允許的,即使傳入了多余的字段,也可以通過類型檢查。但也有一個例外,如果我們直接傳入對象字面量,ts就會對額外的字段進行檢查:
想繞過這種檢查的話,有三種方法:
可索引類型接口
// 用任意的數(shù)字去索引StringArray,得到的都是string interface StringArray {[index: number]: string } let char: StringArray = ['A', 'B'] interface Names {[x: string]: string;// y: number 不能再聲明number類型成員[z: number]: string //數(shù)字索引簽名的返回值一定要是字符串索引簽名返回值的子類型,因為會進行類型轉換,number轉換為string,這樣可以保持類型的兼容 } // => 所以數(shù)字索引如果返回數(shù)字,字符串索引返回就需要更大范圍 interface Names2 {[x: string]: any;[z: number]: number }函數(shù)類型接口
接口能夠描述JavaScript中對象擁有的各種各樣的外形。 除了描述帶有屬性的普通對象外,接口也可以描述函數(shù)類型。
interface Lib {(): void;version: string;doSomething(): void; }function getLib() {let lib: Lib = (() => { }) as Liblib.version = ''lib.doSomething = () => { }return lib }let lib1 = getLib() lib1() ()ts還是要在實戰(zhàn)中多多使用才能融會貫通,目前只是熟悉,大致了解ts的寫法與基本用法,慢慢來。
總結
以上是生活随笔為你收集整理的effective typescript_初学typescript(一) - 来亦何哀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑字体模糊_2020年初电脑配件和配置
- 下一篇: python代码在哪里输入-请问一下这个