Typescript — 基础类型详解

314 阅读2分钟

从这个阶段开始将会对Typescript官方文档进行总结记录。

TypeScript 支持与 JavaScript 几乎相同的数据类型.

布尔值 boolean

let ts:boolean = false;

数字 number

let ts:number = 1let ts:number = 0x0xf00d;

字符串 string

let ts:string = "字符"let ts:object = new Date();

数组 array

let ts: number[] = [1];
let ts: Array<number> = [1]; //数组泛型写法
let arrd:[string,number] = ["1",1];//元组写法,指定位置的类型,访问越界代码时,只可以访问 string | number 的公有方法,例如 toString,否则报错
let arrany:any[] = [1,2,"3",new Date()];//利用 any 在数组里定义任意类型

枚举 enum

编译结果中会包含 enum 代码.

enum sex {male,female};
let male:string = sex[0];
let female:string = sex[1];
===> 编译结果
var sex;
(function (sex) {
    sex[sex["male"] = 1] = "male";
    sex[sex["female"] = 0] = "female";
})(sex || (sex = {}));

任意 any

表示任意类型

let ts:any = "任意值,并且不写 any 默认也是 any,void 与其相反";

空值 void

表示没有任何类型,它只能赋值 null 和 undefined

let ts:void = undefined;  
let ts:void = null;

null 和 undefined

特例: null 和 undefined 是所有类型的子类型(除了never类型),可以赋值给任何类型,但是当strictNullChecks=true时,null 和 undefined 只能赋值给void 和 本身类型,推荐strictNullChecks=true,因为这样可以避免很多隐藏的bug.

let ts:number;
let un:undefined = undefined;
let nu:null = null;
//strictNullChecks=false,赋值成功
ts = un;
ts = nu;
//strictNullChecks=true,赋值失败,
ts = un;
ts = nu;

never类型

是任意类型的子类型,没有类型可以给never类型赋值,即使any也不行.

let ner: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

object表示非原始类型,也就是除numberstringbooleansymbolnullundefined之外的类型。使用object类型,就可以更好的表示像Object.create这样的API。

declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK
create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error

类型断言 as

有时候你会比Typescript更清楚某个变量的类型是什么,你可以通过类型断言来跳过Typescript的类型检查

let result:object;
$.ajax({
  url:'xxx.jsp',
  success(data){
    result = (data as object); //方式一,推荐,jsx时只有这种方式有效
    result = (<obejct>data); //方式二
  }
})