限定类型
- 变量限定类型
- 函数限定类型
- 函数参数限定类型
- 构造函数后面不需要给定类型(new以后得到对象)
- 枚举类型、数组类型、元组类型、不限定类型
- never:无法返回的类型,比如死循环
- 限定数组元素对象类型,限定对象属性类型
- 断言类型
- undefined null
变量类型
//变量限定类型后不能改变变量值类型
var a: Number = 3;
函数类型
函数参数也必须给定类型
函数没有返回值,定义void类型
//当前函数必须由返回值,且返回值必须是number类型
function getNum(): Number {
//任何变量都必须定义类型
let a: Number = 1;
return a;
}
//函数没有返回值,定义void类型
function fn(): void { }
//函数参数也必须给定类型
function argType(a1: Number, a2: String) {
console.log(a1, a2)
}
argType(1, 2 + "");
数组、元组与枚举
//数组类型,所有元素类型必须相同,不同的话可以用元组
//c语言写法
let list: number[] = [1, 2]
//面向对象
let list2: Array<Number> = [1, 2, 3]
//元组Tuple,相比于数组,元组可以用不同类型
let tuple: [string, number, boolean] = ['a', 1, true]
//枚举
enum STATUS { WALK = "walk", SWIM = "swim" }
console.log(STATUS.WALK)//walk
不限类型与无法返回的类型
//any 不确定的通用类型,进来不要使用
var notsure: any = 1;
//never 无法返回的类型,如死循环
限定数组的对象元素类型 限定对象的属性类型
需要借用构造
//限定对象的属性类型
class ItemVo {
id: number = 0
name: string = ""
price: number = 1
selected: boolean = false
constructor(_id: number, _name: string, _price: number, _selected: boolean) {
this.id = _id
this.name = _name
this.price = _price
this.selected = _selected
}
}
var objArr:Array<ItemVo>=[
new ItemVo(1001,'a',35,true),
new ItemVo(1002,'a',35,true),
new ItemVo(1003,'a',35,true)
]
断言,强制指定类型
//断言类型 适用于有些类型无法确定的情况
//子类也属于父类类型,因为子类的原型存在父类
import Parent from './a'
import Child from './b'
var arr1:Array<Parent>=[
new Parent(),
new Child()
]
for(let i = 0; i < arr1.length; i ++){
if(arr1[i].constructor === Child){
//断言,Array装载Parent类型,而Parent没有run方法,但是Child有
//断言强制认为此元素是Child类型
(arr1[i] as Child).run();
}
}
|
请发表评论