# ts基本数据类型
# 布尔类型(boolen)
最基本的数据类型就是简单的true/false值。
let isDone: boolean = false;
# 数字类型(number)
TypeScript里的所有数字都是浮点数。 这些浮点数的类型是 number。 除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;
# 字符串类型(string)
可以使用双引号( ")或单引号(')表示字符串。
let str: string = "ts";
str = "typescript";
ts同样可以使用模板字符串
let name:string = 'tom';
let age:number = '18'
let info:string = `${name}今年${age}岁了`
# 数组类型(array)
**两种方式可以定义数组。 **
- 第一种,可以在元素类型后面接上 [],表示由此类型元素组成的一个数组:
- 第二种,是使用数组泛型,Array<元素类型>
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];
let arr: any[] = [1,'2',true]
# 元组类型(tuple)
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。
let _tuple: [string, number];
_tuple = ['hello', 10];
// 传入的数据类型必须与规定的对应
let _tuple1: [string, number];
_tuple1 = [10,'hello']; // 错误
# 枚举类型(enum)
事先考虑某一个变量的所有的可能的值,尽量用自然语言中的单词表示它的每一个值 比如性别、月份、星期、颜色、单位、学历
默认从0开始
# 普通枚举
enum State {
success=1,
pending,
error=-1
}
console.log(Color.pending) // 2 如果未指定值,则在前一个值得基础上加1
let success:State = State.success // 1
# 常数枚举
- 常数枚举与普通枚举的区别是,它会在编译阶段被删除,并且不能包含计算成员。
- 假如包含了计算成员,则会在编译阶段报错
const enum Colors {
Red,
Yellow,
Blue
}
let myColors = [Colors.Red, Colors.Yellow, Colors.Blue];
const enum Color {Red, Yellow, Blue = "blue".length};
# 任意类型(any)
- any就是可以赋值给任意类型
- 第三方库没有提供类型文件时可以使用any
- 类型转换遇到困难时
- 数据结构太复杂难以定义
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
有一个数组,它包含了不同的类型的数据:
let arr: any[] = [1, true, "free"];
arr[1] = 100;
# void类型
void类型像是与any类型相反,它表示没有任何类型。
一般用于定义函数没有返回值
function testVoid(): void {
console.log("no return");
}
声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null
let unusable: void = undefined;
# never类型
- never是其它类型(null undefined)的子类型,代表不会出现的值
作为不会返回( return )的函数的返回值类型
// 返回never的函数 必须存在 无法达到( unreachable ) 的终点
function error(message: string): never {
throw new Error(message);
}
let result1 = error('hello');
// 由类型推论得到返回值为 never
function fail() {
return error("Something failed");
}
let result = fail();
// 返回never的函数 必须存在 无法达到( unreachable ) 的终点
function infiniteLoop(): never {
while (true) {}
}
# never和void的区别
- void 可以被赋值为 null 和 undefined的类型。 never 则是一个不包含值的类型。
- 拥有 void 返回值类型的函数能正常运行。拥有 never 返回值类型的函数无法正常返回,无法终止,或会抛出异常。
# null undefined
提示
默认情况下null和undefined是所有类型的子类型。可以把 null和undefined赋值给number类型的变量。
let x: number;
x = 1;
x = undefined;
x = null;
let y: number | null | undefined;
y = 1;
y = undefined;
y = null;
# 联合类型
- 联合类型(Union Types)表示取值可以为多种类型中的一种
- 未赋值时联合类型上只能访问两个类型共有的属性和方法
let name: string | number;
console.log(name.toString());
name = 3;
console.log(name.toFixed(2));
name = 'jc';
console.log(name.length);
# 类型断言
- 类型断言可以将一个联合类型的变量,指定为一个更加具体的类型
- 不能将联合类型断言为不存在的类型
let name: string | number;
console.log((name as string).length);
console.log((name as number).toFixed(2));
console.log((name as boolean)); // error
# 双重断言
interface Person {
name: string;
age: number;
}
const person = 'jc' as any as Person; // ok
← TypeScript ts函数 →