TypeScript 入门

72 阅读2分钟

TypeScript 入门 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第9天

1.什么是TypeScript

是JavaScript超集,兼容所有js特性

基本语法

基本类型

相比于JavaScript,typescript语法是变量名称后加上:数据类型

js:const hello  = "Hello World!"
ts:const hello : string = "Hello World!"

对象类型

  • 如果是对象,需要提前通过interface关键字定义好类型才可以使用
  • readonly可以限制属性的只读
  • 属性后加上?表示可选属性
  • 如果属性名是变量,采用[]定义
  • any是ts中的任何类型
  • | 表示可选的值
js:
const obj={id:"1001","name":"test",age:10}
ts:
const obj:Person={id:"1001","name":"test",age:10}
interface:Person{
readonly id:string;
name:"test" | "teat2";
age?:number;
[key:string]:any;

}

函数类型

js:
function add(a,b){
return a+b;
}
ts:
function add(a:number,b:number):number{
return a+b;
}

js:
const add=(a,b)=> a+b;

ts:
const add=(a:number,b:number)=>number=(a,b)=> a+b;
或者
interface Add{
(a:number,b:number):number;
}
const add:Add=(a,b)=> a+b;

函数特性

重载

多个同名的函数,函数的参数类型不同或者数量不同或者返回值类型不同

function add(type:'number'):number;
function add(type:'number',random?:number):number;
function add(type:'number'):string;

数组类型

type T1=number[];
type T2=Array<string | number>
type T3=[number,string]
interface T4=[key:number]:any

空类型

type ET=()=>void;

任意类型

type Any=any;

枚举类型

enum En{a="1",b="2"}

泛型

type Fn=Array<number>;
type Fn=<T extends number>={taget:T}=>T[];//extends表示类型约束
type Fn=Array<{[bieming:name]:number}>;//泛型别名
test as Fn<string,T>  //通过as断言为正确类型

高级类型

联合交叉类型

interface Type1{};
interface Type2{}
type MyList=Array<Type1 | Type2> //联合类型
type MyList=Array<Type1 & Type2> //交叉类型
类型保护:MyList仅能访问联合类型中的交集部分
类型谓词:MyList中参数满足Type1可以访问Type1部分,满足Type2可以访问Type2部分

keyof类型索引:type MyType=keyof {(types:'number',random:number)},等价于type MyType= 'number'| 'random'

函数返回值类型

extends表示类型推断 infer表示定义类型变量

2.为什么学习TypeScript

  • react支持
  • 2020.9 vue3.0支持 特性
  • 动态类型:对类型的检查是在运行期,对象的多态性是与生俱来的
  • 静态类型:对类型的检查是在编译期,可读性强 可维护性强

弱类型:数据类型可以被忽略
强类型:如果一个变量被指定了某一个类型,如果不经过强制数据类型的转换,则永远是这个数据类

3 工程应用

  • 浏览器web
  • node