以javascript为基础构建的语言,是javascript的超集。增加了一些不同于js的功能
- 将动态类型js语言转变为静态类型语言
- 在任何支持js的平台中执行
- ts不能被js解析器直接执行,ts需要先编译为js再执行。
- ts增加了类型判断,支持es的新特性,添加es不具备的新特性,丰富的配置选项,强大的开发工具
ts类型:
- number,
- string,
- boolean,
- 字面量:如 let a:"male"|"female"; (|表示或)
- any:任意类型,跟js变量类似,可以任意赋值,相当于对该变量关闭类型检测,不建议使用此类型。声明变量不指定类型,则ts解析器会自动判断变量的类型为any
let d; - unknown:是类型安全的any,与any的区别是不会影响其他的变量类型。unknown类型的变量,不能直接赋值给其他变量。
let e:unknown
e = 'hello'
e = true
let s:string
//unknown赋值方式
if(typeof e === 'string'){
s = e
}
//类型断言,可以用来告诉解析器变量的实际类型。
//变量 as 类型
//<类型>变量
s = e as string
s = <string>e
- void:用来表示空,以函数为例,就表示函数无返回值
- never:表示永远不会返回结果
function fn2(): never{
throw new Error('error')
}
- object:{}用来表示对象中可以包含哪些属性
//{属性名:属性值,属性名:属性值}
//在属性名后面加?,表示属性可选的
let b:{name: string, age?: string}
b = {name:'tee'}
//[propName: string]: any 表示任意类型的属性
let c:{name: string, [propName: string]: any}
c = {name:'tee', age: 18, gender:'男'}
/*
*设置函数结构的类型声明
*语法:(形参:类型,形参:类型...)=>返回值
**/
let d: (a:number, b:number) => number
d = function(n1: number, n2: number){
return n1+n2
}
- array
/*
*数组类型声明
*语法:类型[],Array<类型>
**/
let e:string[]
let f:Array<string>
- tuple:元组就是固定长度的数组,效率好于数组
/*
*语法:[类型,类型,...]
**/
let h:[string, string]
- enum:枚举
enum Gerder{
male = 0,
female = 1
}
let i:{name:string, gender:Gerder}
i = { name: 'Marry', gender: Gerder.female}
- & 表示同时"与"
//j同时具有name与age
let j: {name: string} & {age:number}
j = {name: 'xxx`, age: 18}
- | 表示‘或’
- 类型别名
type myType = 1|2|3|4|5
let K:myType
let K:myType