TS

1.js語言是動態弱類型語言 賦值各種類型不報錯 函數有參數不傳參調用,傳多個參調用也不報錯
2.ts是靜態語言
---擴展了js的類型
---支持ES新特性
---添加ES不具備的新特性(抽象類,接口)
---豐富的配置選項
---強大的開發工具(類型檢測,語法提示)
3.ts安裝 npm i -g typescript
驗證 tsc -v
ts文件轉為js文件--->tsc ts文件名(在當前文件的路徑下)
4.vscode插件
---chinese(vscode漢化)
---Live Server(本地服務器--html中右鍵open with live server,可以打開默認瀏覽器看效果)
5.自動類型判斷
當對變量的聲明和賦值同時進行時,TS編譯器會自動判斷變量類型
當變量的聲明和賦值同時進行,可以省略掉類型聲明
let a:numbrt
a= 12;
或者let a=12 也可以 (可以自動判斷a的類型為number)
6.字面量聲明
字面量(客觀存在且無法改變的值,例如:1 2 3 4 5 true "hello")
字面量聲明 let a=12;類似于js中const a=12;
7.any類型(表示任意數據類型,對該變量關閉了TS的類型檢測)
顯示聲明:let a:any;a=12,a="89"
隱式聲明:let a; a=90;a="999"
8.unknown類型(更健全的any類型)
let a:unknown;
a=123;
a=true;
let b:boolean;
b=a(報錯)
if(typeof a==="boolean"){b=a} --a,b輸出都是true
9.ts類型斷言
if(typeof a==="boolean"){b=a}
b=a as boolean (當a是boolean時,對b進行賦值)
10.ts中的函數
函數中形參要定義類型,傳參時多傳少傳都會報錯
函數的返回值
未定義返回值的時候 返回值為undefined
function fun(){}--->返回undefined
function fun():number{}--->返回number
function fun():void{}--->返回空
function fun():void{
return 123--->報錯
return "123"--->報錯
return true --->報錯
return NaN--->報錯
return null ---->ok
return undefined--->ok
return ;---->ok
}
function fun():never{ --->使用較少
throw new Error('出錯了')
//程序報錯代碼立即結束,結束之后不會有返回值
}
11.對象類型聲明
let a:object; a={}; a=function(){}
let b:{name:string} //對象中的屬性不能多不能少
若是對象中的部分屬性(age,sex)不確定是否存在
let c:{
name:string, 包含屬性name
age?:number,可能包含age
sex?:string 可能包含sex
}
只知道必須的屬性,不必須的屬性不知道
let propName:string;
let d={
name:string,
[propName:string]:unknown
}
propName:string--->任意的屬性名
12.數組

let arr:string[];
arr[0]="ss"---->ok
arr[1]=12----->報錯

let b:Array<boolean>
b[0]="sd"---->報錯
b[1]=false--->ok

13.tuple類型 元組(定長的數組,因為固定長度,存儲效率好,不會出現擴容的現象,效率高點)
let a:[string,boolean,number];
a=["12",false,123] --->ok,多一個少一個元素報錯
14.Enum(枚舉)
enum 枚舉名稱{成員1,成員2.....}(成員數量不定)

enum a{
  male,
female
}
console.log(a.male)--->0
console.log(a.female)--->1

數字枚舉

enum a{
  male = 3,
female
}
console.log(a.male)--->3
console.log(a.female)--->4

字符串枚舉

enum a{
  red = "紅",
yellow="黃"
}
console.log(a.red)--->紅
console.log(a.yellow)--->黃

15.聯合類型聲明
let a:number|string (a既可以是number又可以是string)
a=123---->ok
a="123"---->ok
16.ts類型別名
type myType=1|2|3|4|5|6|7|8|9|10;
let a:myType;
let b:myType;
這樣呢,a,b就和myType一樣的類型和值
16.ts的配置---自動編譯文件
tsc 文件名 -w (自動編譯文件的命令)
17.在文件夾下新建文件:tsconfig.json
執行 tsc -w,這樣tsconfig.json的根目標下所有的ts文件都可以被編譯
18.tsconfig.json的配置
include:定義希望被編譯文件所有的目錄
{
//只編譯dev目錄下面的
“include”:["./dev//"] //:任意目錄,:任意文件
//定義不需要編譯的目錄
“exclude”:["./prop/*/"]
//繼承其他文件的配置
“extends”:“./config/base”
//指定需要編譯文件的列表
“files”:one.ts,two.ts
}
19.complierOptions
----target:默認(ES3),"ES5","ES6/ES2015","ES2016","ES2017"或“ESNext”
----module:指定使用的模塊化規范(可選值:“none”,"commonJs","AMD","System","UMD","ES6"或者“ES2015”)
只有"AMD"和"System"能和--outFile一起使用
“ES6”和“ES2015”可使用在目標輸出為“ES5”或更低的情況
----lib指定編譯過程中需要引入的庫的文件列表
----outDir:用來指定編譯后文件所在的目錄
----outFile:將編譯的代碼合并成一個文件(多個ts文件打包成一個ts文件)
-----allowJs:(默認false)是否對js文件進行編譯,是否編譯合并到outFile文件中
-----checkJs:(默認false)檢測js代碼是否符合語法規
-----removeComments:編譯得時候是否刪除注釋內容 true--刪除 false--不刪除
-----noEmit 不生成編譯后得文件 true--不生成 false--生成
----noEmitOnError當存在語法錯誤時候,不生成編譯后得文件
----awaysStrict編譯后得代碼是否使用嚴格模式 true--是(編譯后的文件頭部有“use strict”),false--否
注釋:當代碼使用了模塊化的模式時,會使用嚴格模式awaysStrict為false也是如此
----noImplicitAny不允許隱式的any類型
----strictNullChecks嚴格的檢查空值
----strict所有嚴格檢查的總開關
20.直接運行ts的配置
全局安裝ts-node (npm i -g ts-node)
ts-node -v:查看ts-node版本
ts-node 文件名---->編譯運行ts文件
21.面向對象
程序中特定的操作要通過各種對象來操作
操作瀏覽器---->windows對象
操作網頁---->document對象
操作控制臺---->console對象
---程序中的對象
22.ts中的類
創建類---->關鍵字class

class Person{
  static  readOnly  name:string;
  age:number
}
實例化
let men=new Person();(不傳參數的時候可以不用())

靜態修飾符---->static
被static修飾的屬性或者方法 屬于類 不屬于實例 實例無法調用 只有類可以調用
readOnly---->屬性只能讀取不能修改
23.構造方法

class Person{
  name:string;
 constructor(){console.log(this.name)}
}

以方法的形式進行調用的時候---->this指向window
以對象的形式進行調用的時候---->this指向被調用的對象
當實例化對象的時候會自動調用constructor這個構造方法,所有用constructor可以給類賦初始值
24.繼承
class Dog extends Animal{}
25.ts的重寫()
直接在子類中重寫父類的屬性和方法
26.super關鍵詞 指父類,超類
通過super可以在子類中調用父類中的方法

class Dog extends Animal{
age:number;
  sleep(){
    super.sleep();---->子類繼承父類的sleep方法  
 }
 constructor(name:string,age:number){
   super(name);  --->繼承父類的constructor且有初始化參數
   this.age=age  --->子類新增參數
 }
}

如果子類中寫了構造方法,在子類的構造方法中必須調用父類的調用方法。子類不寫構造函數,父類就自動調用,子類寫,會把父類的構造函數覆蓋,所以必須調用父類構造函數。
27.ts中的抽象類
以abstract開頭的類被稱為抽象類
abstract class Animal{
name:string="抽象類";
abstract sleep():void;--->抽象方法沒有方法體,沒有實現
}
let dog=new Animal()---->報錯,無法創建抽象類的實例
注意:1.抽象類只能被繼承,不能初始化一個實例;
2.子類繼承抽象類,必須重寫抽象類中的所有抽象方法,如果不重寫,那么這個類也應該是抽象類
28.ts的接口--->用來定義一個類結構,定義一個類中應該包含的屬性和方法。接口也可以當成類型聲明去使用,接口可以重復聲明,取所有相同接口名的并集
interface 接口名

interface myInterface{
  name:string;
  sleep():void;  --->接口中的方法默認都是抽象方法,沒有方法體
}
let b:myInterface;--->通過接口聲明一個變量
b={
  name:"xdclass",
  sleep(){
   console.log('xd')
  }
}

一個對象繼承一個接口--->
class Person implements myInterface{}
29.ts中屬性的封裝
屬性修飾符
---- public:可以在任意位置訪問,是默認值。
---- private:私有屬性,只能在類的內部進行訪問,子類或者其他地方都不能訪問。通過在類中添加方法使得私有屬性可以被外部訪問。
---- protected:受保護的屬性,只能在當前類中被訪問
屬性的封裝 setAge getAge 保證屬性不能隨意被賦值
屬性存取器 getter讀取屬性,setter設置屬性
30.ts中的泛型
定義一個函數,把傳入的參數并返回回去
function cache(prop:string):string{
return prop
}
在定義函數或者類的時候,如果遇到類型不明確的就可以使用泛型,泛型就是一個不確定的類型<任意一個大寫的字母>
function cache<T>(prop:T):T{
return prop
}
----泛型約束:指定泛型的類型
let a=cache<string>('true')
----多個泛型
function cache<T,P>(prop:T,flag:P):T{
return prop
}
---泛型在接口中的使用

interface myInterface<T>{
name:T;
}
class Person<T,P> implements myInterface<T>{
  name:T;
 age:P;
constructor(name:T,age:P){
  this.name=name;
this.age=age
}
}
let  obj=new Person<string,number>("張三",30 )

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • TS 入門和Vue實踐 一、TS 快速上手 從 JavaScript 程序員的角度總結思考,快速上手理解 Type...
    以虛名稱之閱讀 21,229評論 0 15
  • 為什么要使用TS? 獲得更好的開發體驗,解決JS中一些難以解決的問題 JS存在的問題: 使用了不存在的變量函數或者...
    小丹子1o1閱讀 734評論 0 0
  • TypeScript 是 JavaScript 的一個超集,主要提供了類型系統和對 ES6 的支持,它由 Micr...
    Gukson666閱讀 8,732評論 3 29
  • 編程語言的類型 動態類型語言 靜態類型語言 typescript 特性 優勢 類型注解 & 類型推斷 基礎類型 &...
    李振亞_cb74閱讀 21,455評論 1 0
  • Vue3官網文檔[https://vue3js.cn/docs/zh/guide/introduction.htm...
    一蘇沨來閱讀 3,330評論 0 7