准备工作
npm i -g typescript
编译tsc xx.ts
如果变量的声明和赋值是同时进行的 TS可以自动对变量进行类型检测
let c = false
//等价于
//let c :boolean = false
c=123 // 报错
//函数参数、返回值类型声明
function sum(a:number,b:number):number {
return a+b;
//return 'a' 报错
}
sum(123,'456',789) //出现报错
//使用字面量进行类型声明
let a:10
a=10
a=11//报错
//可以使用| 来连接多个类型(联合类型)
let b: 'male'|'female'
b='male'
b='female'
let c :boolean | string
c = true
c = 'abc'
any
let a:any
a=10
a='a'
//与js无区别 相当于对该变量关闭了TS的类型检测
let a
//声明变量不指定类型 TS解析器会自动判断类型为any
let a:any
a=true
let b:number
b=a
//a的类型是any 同时可以赋值给任意变量(包括其他类型)
unknown
- 安全的any、
- 不能直接赋值给其他变量
let e :unknown
let s :string
e='halo'
s='halo'
s=e //报错 e是unknown类型 不能赋给别的类型
//解决方法
if(typeof e ==='string') s = e
类型断言
- 变量as类型
- <类型>变量
let e :unknown
e = 'a'
let b:string
b=e as string
b=<string> e
void 用来表示空 以函数为例 表示没有返回值的函数
function s(a:number):void {
return true //报错
return undefined
return null
}
never 表示永远不会返回结果 函数无终点 捕获异常
function fn () :never {
throw Error('err')
//报错后函数停止 无终点
}
object
let a:object
a = {}
a = function () {
}
//不会报错 函数也是object
let b:{name:string}
// 语法 {属性名:属性值类型,属性名:属性值类型}
b={}//报错 没有name属性
b={name:'abc'}
b={name:'abc',age:18} //报错 必须和声明一模一样
let b:{name:string,age?:number}
// 问号 表示非必须
b={name:'abc'} //因为? 所以不会报错
b={name:'abc',age:18} //报错 必须和声明一模一样
要求有name属性 其他属性不管
let c:{name:string,[prop:string]:any}
c = {name:'a',b:1,c:true,d:'s'}
定义函数
- (形参:类型,形参:类型) => 返回值或其类型
let d :(a:number,b:number) => number
数组
let e: string[]
//另一种写法 let e:Array<number>
e = [1,2,3,4] // 报错
e = ['1','2','3']
元组:固定长度的数组
- [类型,类型]
let h:[string,number]
h =['1','2'] //报错 类型不对
枚举
enum Gender {
male ,
female
}
let i:{name:string,gender:Gender}
i = {
name:'s',
gender:Gender.male
}
&
let j:{name:string}&{age:number}
j = {
name:'s',
age:1
}
type 给类型起别名
type mtype = string|number
let k:mtype
let l:mtype
\