TypeScript 使用筆記

TS 是 JS的超集,它可以編譯成純JS。

TS可以在任何瀏覽器、任何操作系統、任何平臺上運行

TS 數據類型

類型註解

let flag : boolean = false;

變量後面跟的冒號後面的類型就是這個變量的類型註解。類型的註解是可選的,不加就變成了JS,因爲TS設計目標就是:兼容JS,減少JS遷移TS的成本。

類型 描述
Boolean 布爾類型
Number 數字類型
String 字符串類型
Array 與JS相同; 增加了泛型數組, 元組(Tuple)
Enum enum類型是爲了給一個數字集合更友好地命名
any any類型可以表示任意JavaScript值
void void就是any的對立面,即所有類型都不存在的時候。你會在一個沒有返回值的函數看到它

泛型類型

TS 元組

數組中元素的數據類型都一般是相同的(any[] 類型的數組可以不同),如果存儲的元素數據類型不同,則需要使用元組。

元組中允許存儲不同類型的元素,元組可以作爲參數傳遞給函數。

var mytuple = [10,"Runoob"];    //元組
  • push() 向元組添加元素,添加在最後面。
  • pop() 從元組中移除元素(最後一個),並返回移除的元素。

TypeScript 聯合類型

聯合類型(Union Types)可以通過管道(|)將變量設置多種類型,賦值時可以根據設置的類型來賦值。
注意:只能賦值指定的類型,如果賦值其它類型就會報錯。
創建聯合類型的語法格式如下:(Type1|Type2|Type3 )

var arr:number[]|string[];    或  var val:string|number 

TS generator函數

generator是控制函數的執行過程,手動暫停和恢復代碼運行。(function* add(){})

yield 相當於對代碼打斷點,每次調用 next()方法,函數往下運行一下,直到遇到yield或者return ;

function*  doSomething() {
     console.log("start");
      yield;
       console.log("finish");
 }


 //調用方式需要注意一下,此案例中,他不能直接調用doSomething,需要聲明個變量fun1,通過變量fun1.next()去調用該方法
var fun1 = doSomething() ;
fun1.next();//每調取一次next的方法,這個函數就會被調用一次到yield,以此類推
fun1.next();
function* getStockPrice(stock){
	while(true){
	yield Math.random()*100;
	}
}

var priceGenerator = getStockPrice("IBM");
var limitPrice = 15;
var price = 100;
while(price>limitPrice){
	price = priceGenerator.next().value;
	console.log(`the generator return ${price}`);
}

console.log(`buying at ${price}`);

TS destructuring 析構表達式

destructuring 通過表達式將對象或數組拆解成任意數量的變量;

function getStock{
	return {
		code:'123',
		price:12,
		goods:{
			goods1:10,
			goods2:20,
			goods3:30
		}
	}
}

var {code:codex,price,goods:{goods3}} = getStock();
console.log("code:"+codex)  // 123
console.log("price:"+price) //12
console.log("goods:"+goods3) //30



var array = [1,2,3,4];
function getArrayItem(num1,num2,...others){
console.log(num1) //1
console.log(num2)  //2
console.log(others)  //[3,4]
}
getArrayItem(array)

TS as 類型斷言

在這裏插入圖片描述

TS AllowJS 選項 (–allowJS)

TypeScript 1.8 開始支持了 AllowJS 選項,現在可以直接引用 js 文件而不需要對應的 .d.ts 文件也不會報錯(沒有那麼良好的類型提示支持)。

TS 形參

function getName<T,K>(name:T,age?:K){
    return `name: ${name} ----------`+(age?`age: ${age}`:'年齡保密')
}

alert(getName<string,number>('123'))

ts函數重載

java中方法的重載:重載指的是兩個或者兩個以上同名函數,但它們的參數不一樣,這時會出現函數重載的情況。
typescript中的重載:通過爲同一個函數提供多個函數類型定義來試下多種功能的目的。

   function getInfo(name:string):string;
   function getInfo(name:string,age:number):string;
   function getInfo(name:any,age?:any):any{
         if(age){

             return '我叫:'+name+'我的年齡是'+age;
         }else{

             return '我叫:'+name;
         }
     }
     
      // alert(getInfo('zhangsan'));  /*正確*/
     // alert(getInfo(123));  錯誤
      // alert(getInfo('zhangsan',20));

TS keyof

keyof操作符,用於類型查詢

export interface IUser {
    email: string;
    password: string;
    address: string;
    phone: string;
}

type UserProps = keyof IUser;

在這裏插入圖片描述
相關使用:
在這裏插入圖片描述

安裝使用

  1. 安裝
npm install -g typescript
  1. 編譯
tsc helloworld.ts
  1. ts中引入js文件(js遷移)

配置文件tsconfig.json (tsc --init)

TypeScript使用tsconfig.json文件管理工程配置。包含哪些文件或進行哪些檢查的相關配置。

{
    "compilerOptions": {
        "outDir": "./built",       //生成的所有文件放在built目錄下(通過outDir)
        "allowJs": true,       //接受JavaScript做爲輸入(通過allowJs)
        "target": "es5"       //將JavaScript代碼降級到低版本比如ECMAScript 5(通過target)。
    },
    "include": [
        "./src/**/*"        //讀取所有可識別的src目錄下的文件(通過include)
    ]
}

TS ? 和 !

? 用來檢查 問號前面的變量爲 null 或 undefined 時,程序不會出錯。

stu3: Student;

<h1>stu3 id{{stu3?.id}}</h1>                // stu3 id
<h1>stu3 name{{stu3?.name}}</h1>      // stu3 name

! 用來檢查 感嘆號後面的變量爲 null 或 undefined 時, 程序不會出錯。

stu2: Student = {
    id: 1,
    name: undefined,
    age: 3
  };

<h1>stu2 name {{stu2!.name}}</h1>  // stu2 name 
<h1>stu2 id {{stu2!.id}}</h1>            // stu2 id 1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章