2020年11月12日

ts-数据类型

作者 rourou
  • 布尔类型boolean:最基本的数据类型就是简单的true/false值
let flag :boolean = true;
  • 数值类型:number( 除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量)
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;
  • 字符串:string
var str :string = 'aaa'
  • 数组类型:array或者[]

第一种定义数组,使用[]

let list:number[] = [1, 2, 3];

第二种定义数组,使用数组泛型,Array<元素类型>

let list:Array<number> = [1, 2, 3];
  • 元组类型Tuple:表示一个已知元素数量和类型的数组,各元素的类型不必相同
let x:[number.string] = [1, 'a'];
  • 枚举类型:enum(主要处理非数值的数据,用自然语言中含义清楚的单词来表示一个值)

定义:enum 枚举名{标识符[= 整型常数]}

enum Flags {success=1,error=2};
let s:Flags = Flags.success;//手动赋值
let s1:Flags = Flags[2];//我们知道数值为2,可查找Flags中相应的名字
console.log(s);//1
console.log(s1);//error

如果标识符没有赋值,打印出来就是该值的下标

enum s1{s,a};
console.log(s1.a);//1
  • 任意类型:any(未知数据的数据类型,可用any;比如来自用户输入等情况,不希望通过类型检查器对这些数值进行检查而直接让他们通过编译阶段的检查)
var num1:any = 'a';
num1 = 1;
num1 = true;

已知一部分数据类型时,也用any

let list: any[] = [1, true, "free"];
list[1] = 100;
  • 空类型:void(有任何类型,一般用于定义方法的时候方法没有返回值)
function run():void{
 console.log('aaa');
}
run();//aaa
  • null和undefined(迷人情况下null和undefined是所有类型的子类型,可以使用联合类型string | null | undefined)
let u: undefined = undefined;
let n: null = null;
left x : string | null | undefined;
  • never类型:表示那些用不存在的值的类型。没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。(一般用于抛出异常)
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
    return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
    while (true) {
    }
}
  • object类型
declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK
create(42); // Error
  • 类型断言:第一种使用<>,第二种使用as(运行时没有影响,只有再编译阶段起作用。 TypeScript会假设你,程序员,已经进行了必须的检查)
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
let strLength1: number = (someValue as string).length;