前言
听说项目要升级了,来学一波ts,之前写过一点ts,但基本上写成了anyscript,不过亡羊补牢为时不晚。
类型
ts在声明的时候即确定类型,类似int、char,而在js中变量的类型是能动态改变的。
let key = 1 //key的类型为number
key = ‘1’ //报错 Type 'string' is not assignable to type 'number'
基础的类型如number、string、boolean,联合类型是多种其他类型组成,比如Boolean可以看成是 true或false的联合类型,值得注意的是联合类型在代码编写过程中会产生缩小类型的现象
function test(arg: number | string) {
if(typeof arg === 'string') {
return arg //string
}
return arg //number
}
定义对象类型可以使用别名或者接口
type Human = {
age: number
sex: string
}
interface Animal {
age: number
sex: string
}
const BaJie: Human = {
age: 122,
sex: 'Y'
}
const pig: Animal = {
age: 12,
sex: 'Y'
}
// 如果把鼠标移到八戒和pig上面,interface定义的对象属性会有比type更详细的提示
interface Animal {
hobbey?: string[]
}
pig.hobbey = ['eat', 'sleep']
// type Human = {
// hobbey?: string[]
// } error
// interface是开放的,type是封闭的,基于不同的目的,这个区别可能是正面的也可以是负面的
定义数组类型T[]。
枚举是ts新增的类型,将ts的枚举编译成js
//ts
enum StatusCodes {
OK,
BadRequest = 400,
Unauthorized,
PaymentRequired,
Forbidden = 'cvas',
NotFound = 200,
}
//js
"use strict";
var StatusCodes;
(function (StatusCodes) {
StatusCodes[StatusCodes["OK"] = 0] = "OK";
StatusCodes[StatusCodes["BadRequest"] = 400] = "BadRequest";
StatusCodes[StatusCodes["Unauthorized"] = 401] = "Unauthorized";
StatusCodes[StatusCodes["PaymentRequired"] = 402] = "PaymentRequired";
StatusCodes["Forbidden"] = "cvas";
StatusCodes[StatusCodes["NotFound"] = 200] = "NotFound";
})(StatusCodes || (StatusCodes = {}));
枚举默认是基于数字的,它的值从 0 开始,其余的每个值都会自增 1,枚举可以正反向映射,但不限于字符串枚举.
函数
函数的声明需要确认入参类型和返回类型
//元组类型
\