布尔类型
布尔值是最基础的数据类型,在 TypeScript 中,使用 boolean 定义布尔值类型:
const bool1: boolean = false
const bool2: boolean = 'fasle' //编译器报错,不能将类型“"dsdsd"”分配给类型“boolean”。
const bool3: boolean = new Boolean(1) // 不能将类型“Boolean”分配给类型“boolean”。 “boolean”是基元,但“Boolean”是包装器对象。如可能首选使用“boolean”。
const bool4: boolean = Boolean(0)
console.log(bool4) // false
const bool5: boolean = Boolean(1)
console.log(bool5) // false
数值类型
使用 number 定义数值类型:
let num: number = 1212
num = 0b101110 // 二进制
num = 0o172 // 八进制
num = 0x7b // 十六进制
字符串类型
使用 string 定义字符串类型:
let str1: string = 'jsbin'
let str2: string = `使用es6的字符串模板也可以${num}`
数组类型
定义数组有两种写法
let arr1: number[] = [1,2,3,4] // 写法1
let arr2: Array<number> = [1,2] // 写法2
let arr3: (string | number)[] = [1] // 联合类型,既可以是数字类型,也可以有字符串类型
let arr4: Array<number | string> = [1, '2']
元组类型
长度固定,对应数据的数据类型要一致
const tuple1: [string, boolean, number] = ['jsbin', true, 0]
const tuple2: [string, number] = ['jsbin', '12121'] // 不能将类型“string”分配给类型“number”。
const tuple3: [string, number] = ['jsbin', 121, 1212] // 不能将类型“[string, number, number]”分配给类型“[string, number]”。属性“length”的类型不兼容。
枚举类型
enum Rolse {
SUPER_ADMIN = 905,
ADMIN,
USER
}
// 编译成js之后
var Rolse;
(function (Rolse) {
Rolse[Rolse["SUPER_ADMINS"] = 905] = "SUPER_ADMINS";
Rolse[Rolse["ADMINS"] = 906] = "ADMINS";
Rolse[Rolse["USERS"] = 907] = "USERS";
})(Rolse || (Rolse = {}));
console.log(Rolse.USER) // 907
any
// any类型(任何类型)
let any: any
any = 0
any = false
any = '1212'
空值void
avaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数:
function alertName(): void {
console.log(JsBin');
}
声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null:
const unusable: void = undefined;
null和undefined
在 TypeScript 中,可以使用 null 和 undefined 来定义这两个原始数据类型:
与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:
let u: undefined = undefined
let n: null = null
// 这样不会报错
let num: number = undefined;
// 这样也不会报错
let u: undefined;
let num: number = u;
// Type 'void' is not assignable to type 'number'.
let u: void;
let num: number = u;
never
// never (别得类型都不能)
const errorFn = (message: string) : never => {
throw new Error('dsd')
}
object
使用object定义对象类型
// object
let obj: object = {
name: 'jsbin'
}
类型断言
类型断言(Type Assertion)可以用来手动指定一个值的类型。两种写法1.<类型>值; 2.值 as 类型
// 类型断言
function getLength(something: string | number): number {
if ((<string>something).length) {
return ((something as string).length);
} else {
return something.toString().length;
}
}