TypeScript中的数据类型
typescript中为了使编写的代码更规范,更有利于维护,增加了类型校验,在typescript中主要给我们提供了以下数据类型
布尔类型(boolean)
数字类型(number)
字符串类型(string)
数组类型(array)
元组类型(tuple)
枚举类型(enum)
任意类型(any)
null 和 undefined
void类型
never类型
布尔类型(boolean)
// es6的写法
let flag = true;
flag = 456;
// ts的写法
let flag:boolean= true;
flag = false; // 正确
flag = 123; // 错误
数字类型(number)
// es6的写法
let num = 123;
num = '123';
// ts的写法
var num:number=123;
num=456; // 正确
num='str'; //错误
字符类型(string)
// es6的写法
let str = 'str';
str = 123;
// ts的写法
let str:string = 'str';
str = 'hello world'; // 正确
str = 123; // 错误
数组类型(array)
ts中定义数组有两种方式:都表示定义的数组元素都是数字类型
// es6的写法
var arr=['1','2'];
// 1.第一种定义数组的方式
var arr:number[]=[11,22,33];
//2.第二种定义数组的方式
var arr:Array<number>=[11,22,33];
var arr:number[]=['str', 1,2]; // 错误,数组元素只能是数字类型
元组类型(tuple)
元组类型属于数组的一种
let arr:[number,string]=[123,'this is ts']; // 表示定义的元素arr有一个数字类型和一个字符串类型的元素组成
any类型
枚举类型(enum)
随着计算机的不断普及,程序不仅只用于数值计算,还更广泛地用于处理非数值的数据。 例如:性别、月份、星期几、颜色、单位名、学历、职业等,都不是数值数据。
在其它程序设计语言中,一般用一个数值来代表某一状态,这种处理方法不直观,易读性差。如果能在程序中用自然语言中有相应含义的单词来代表某一状态,则程序就很容易阅读和理解。也就是说,事先考虑到某一变量可能取的值,尽量用自然语言中含义清楚的单词来表示它的每一个值,
这种方法称为枚举方法,用这种方法定义的类型称枚举类型。
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数],
} ;
enum Flag {success=1,error=2};
let s:Flag=Flag.success;
console.log(s); // 1
enum Color {blue,red,'orange'};
var c:Color=Color.red;
console.log(c); //1 如果标识符没有赋值,则它的值就是下标
enum Color {blue,red=3,'orange'};
var c:Color=Color.red;
console.log(c); // 3
var c:Color=Color.orange;
console.log(c); // 4 如果元素前面的标识符已赋值,则后面的元素值为前一个标识符的值+1
任意类型(any)
var num:any=123; // 正确
num='hello'; // 正确
num=true; // 正确
任意类型的用处
var oBox:any=document.getElementById('box');
oBox.style.color='red';
null和undefined类型 其他(never类型)数据类型的子类型
在js中初始化一个元素,但不赋初始值,则该属性值为undefined,但在ts中初始化元素为某类型(除null和undefined)但不赋值,会报错;
var num:number;
console.log(num); // 输出undefined,但会报错
解决上述问题有两种方式:
1、var num:undefined; // 定义没有赋值就是undefined
2、var num:number | undefined; // num也可赋值为数字类型123
var num:number | null | undefined; // 表示一个元素可能是number类型,可能是null,可能是undefined
void类型
typescript中的void表示没有任何类型,一般用于定义方法的时候方法没有返回值。
// es5的定义方法
function run() {
console.log('run');
}
// ts的定义方法
function run():void {
console.log('run');
}
// 注意这里的void不能换成undefined,方法没有返回值是void类型。
function run():number {
return 123;
}
其他类型(never)
never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。
never类型是其他类型 (包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明never的变量只能被never类型所赋值。
never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。
var a:undefined;
a=undefined;
var b:null;
b=null;
var a:never;
a=123; //错误的写法
a=(()=>{
throw new Error('错误');
})();
下面是一些返回`never`类型的函数:
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
// 推断的返回值类型为never
function fail() {
return error("Something failed");
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}
上一篇TypeScript基础入门(一)
下一篇TypeScript基础入门(三)主要介绍ts中的函数
下一篇TypeScript基础入门(四)主要介绍ts的类与接口