TypeScript 基本类型(二)
程序员文章站
2022-03-05 23:22:31
...
布尔类型(boolean)、数据类型(number)、字符串类型(string)定义方式:
var num1:number = 12;
var num2:string = 'ABC'
var num3:boolean = true
注意:定义时必须指定数据类型,且赋值不能改变其类型
数组定义方式
1、[类型 + 方括号」表示法
2、数组泛型: Array<elemType>
let newarr:number[]=[1,2,3,4]
let arr2:Array<number>=[1,2,3,4]
元组类型(tuple),属于数组的一种,可以为数组中的每个项指定数据类型
let arr4:[number,string,number]=[1,'2',3]
枚举类型(enum)
enum 枚举名{
标识符[=整型常数]
标识符[=整型类型]
}
enum Status {success=1,error=0,cancal=-1}
let statusVal:Status=Status.success
//console.log(statusVal) //1 若标识符没有值,则返回下标
任意类型(any)
let boxNode:any = document.getElementById('box') //例如获取节点,修改样式,若不指定类型会报错
boxNode.style.color='green';
//undefined类型和null类型
let num2:number|undefined
//console.log(num2) //不会报错,直接返回undefined
//当元素值不固定时,可能是number,string,undefined,null时,定义方式如下:
let num3:number|string|null|undefined
num3=110
//console.log(num3)
void类型:void表示没有任何类型,一般用于定义方法的时候没有返回值
function noreturn():void{
console.log('run')
}
noreturn();
function test():string{ //有返回值时,方法中指定所返回的类型即可
return 'string'
}
var run = test();
console.log(run);
never类型:其他类型(包括了undefined、null类型)的子类型,代表从不会出现的值,never类型的变量只能被never类型所赋值
let neverVal:never;
neverVal=(()=>{
throw new Error('失败')
})();
类型推论:如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。
let myFavoriteNumber = 'seven';
myFavoriteNumber = 7; //error TS2322: Type 'number' is not assignable to type 'string'.
//它等价于:
let myFavoriteNumber:string = 'seven';
myFavoriteNumber = 7;
//在TypeScript 2.1 之前,如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查,TypeScript 2.1 中,编译器会考虑对 myFavoriteNumber 的最后一次赋值来检查类型
let myFavoriteNumber;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
联合类型
let num:string|number|null;
num='ABC';
num=20
num=null
num=true //Type 'true' is not assignable to type 'string | number | null'.
访问联合类型的属性或方法
不确定联合类型的值是哪个类型时,只能访问这个联合类型中所有类型里所有的属性和方法
function getValue(something: string | number): any {
return something;
}
var g1 = getValue(100)
var g2 = getValue('string')
//var g3 = getValue(true) //报错
联合类型的变量在赋值时,会根据值推断出一个类型
var StudentName:string|number;
StudentName='小明'
console.log(StudentName.length) //2 字符串类型包含length属性
StudentName=100
//console.log(StudentName.length) //error TS2339: Property 'length' does not exist on type 'number'.