ts基础类型
基本類型
let isFlag:boolean = false; //布爾 let num1:number = 1 //number let str1:string = "2" //string let var1:null = null // null let var2:undefined = undefined //undefined//一個變量可以賦值多種類型 let var3:boolean | number = 1 var3 = trueany 任何類型
我們不希望類型檢查器對這些值進行檢查而是直接讓它們通過編譯階段的檢查。可以使用 any類型來標記這些變量
let notSure:any = 4數(shù)組
let arr1:number[]=[1,2,3] //方式一:元素類型[] let arr2:Array<string> = ['1','3'] //方式二:Array<元素類型> let ro:ReadonlyArray<number> = [1,2,3] //ReadonlyArray<元素類型> 可以確保數(shù)組創(chuàng)建后再也不能被修改 ro[0]=4 //報錯 ro.push(5); // 報錯 ro.length = 100; // 報錯 arr1 = ro ; //報錯 就算把整個ReadonlyArray賦值到一個普通數(shù)組也是不可以的arr1 = ro as number[] //可以用類型斷言重寫引用對象
接口可以描述對象的shape,也能描述函數(shù)類型
interfance接口描述普通對象
- 必含的: age: number;
- 可選的:sex?:string;
- 只讀的:readonly x:number;
- 任意數(shù)量的其他屬性: [propName:string]:any; 如果any換成其他類型的必須是接口上其他數(shù)據(jù)描述的的集合,否則報錯。
readonly和const區(qū)別:屬性只讀用readonly;變量只讀用const
接口繼承:
接口也可以相互繼承。 這讓我們能夠從一個接口里復(fù)制成員到另一個接口里,可以更靈活地將接口分割到可重用的模塊里。
interfance接口描述函數(shù)類型
//定義函數(shù)描述接口 interface SearchFunc {//參數(shù)列表和返回值類型的函數(shù)定義。參數(shù)列表里的每個參數(shù)都需要名字和類型。(source: string, subString: string): boolean; }let mySearch: SearchFunc; mySearch = function(source: string, subString: string) {let result = source.search(subString);return result > -1; } mySearch('1','2')// 對于函數(shù)類型的類型檢查來說,函數(shù)的參數(shù)名不需要與接口里定義的名字相匹配。但是類型要和接口定義的類型匹配。 mySearch = function(src: string, sub: string): boolean {let result = src.search(sub);return result > -1; }//必須包含age,name,并且類型也要對應(yīng)上,可以有別的屬性 function printLabel1(person2: Person ) {console.log(person2.city); } let person2 = {age:10,name:'a',sex:'男',city:'上海'} printLabel1(myObj1);interfance接口描述可索引的類型
1.數(shù)字下標索引arr[0]
//我們定義了StringArray接口,它具有索引簽名。 這個索引簽名表示了當用 number去索引StringArray時會得到string類型的返回值。 interface StringArray {[index: number]: string; //定義獲取下標為數(shù)字,每個值為string類型 }let arr:StringArray = ["Bob", "Fred"] console.log(arr[0])索引簽名設(shè)置為只讀,防止了給索引賦值:
interface ReadonlyStringArray {readonly [index: number]: string; } let myArray: ReadonlyStringArray = ["Alice", "Bob"]; myArray[2] = "Mallory"; // error! 不能設(shè)置myArray[2] ,索引簽名是只讀的2.字符串索引聲明了 obj.property和obj[“property”]兩種形式
interface NumberDictionary {[index: string]: number; //定義獲取下標為字符串,值為numberlength: number; // 可以,length是number類型//name: string // 錯誤,`name`的類型與索引類型返回值的類型不匹配 } let obj:NumberDictionary = {'length':2} console.log(obj.length,obj["length"])元祖 Tuple
元組類型允許表示一個已知元素數(shù)量和類型的數(shù)組,各元素的類型不必相同。
let x:[string,number] = ['h',1];枚舉
enum類型是對JavaScript標準數(shù)據(jù)類型的一個補充。使用枚舉類型可以為一組數(shù)值賦予友好的名字。
enum Color {Red,Green} let c:Color = Color.Red //0 console.log(Color)//{0: 'Red', 1: 'Green', Red: 0, Green: 1}//編譯為js文件就是: var Color; (function (Color) {Color[Color["Red"] = 0] = "Red";Color[Color["Green"] = 1] = "Green"; })(Color || (Color = {})); var c = Color.Red;默認情況下,從0開始為元素編號。 你也可以手動的指定成員的數(shù)值。
enum Color {Red = 1, Green}//編譯為js文件就是: var Color; (function (Color) {Color[Color["Red"] = 1] = "Red";Color[Color["Green"] = 2] = "Green"; })(Color || (Color = {}));或者,全部都采用手動賦值:
enum Color {Red = 1, Green =4}//編譯為js文件就是: var Color; (function (Color) {Color[Color["Red"] = 1] = "Red";Color[Color["Green"] = 4] = "Green"; })(Color || (Color = {}));枚舉類型提供的一個便利是你可以由枚舉的值得到它的名字。 例如,我們知道數(shù)值為2,但是不確定它映射到Color里的哪個名字,我們可以查找相應(yīng)的名字。
總結(jié)
- 上一篇: js实现排序
- 下一篇: ts 函数声明及泛型函数