TypeScript
一.基础类型
1.布尔值
let isDone: boolean = false;
2.数字
支持数字,二,八,十,十六进制
let age : number = 24
let decLitecolor : number = 0b1010
3.字符串
支持( ")和(')使用字符串模板并且以${str}这种形式嵌入表达式
let name: string = 'bob'
let age: number = 24;
let sentence: string = **hello my name is ${name}, I'll be ${ age + 1 } years old next month.**
4.数组
数组泛型,Array<元素类型>
let list: number[] = [1,2,3]
let list1: Array<number> = [1,2,3]
5.元组Tuple
表示一个已知元素数量和类型的数组,各元素的类型不必相同
当访问一个已知索引的元素会得到正确的类型
如果两类型都有相同的方法则可以正确执行
let x: [string, number];
x = ['hello', 10] // ok
x = [10, 'hello'] // error
console.log(x[0].substr(1)) // ok
console.log(x[1].substr(1)) // Error, 'number' does not have 'substr'
6.枚举enum
enum类型可以为一组数值赋予友好的名字
enum color { Red, Green, Blue }
let c: Color = Color.Green;
// 默认情况下,从0开始为元素编号, 可以手动更改上面的值
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
// 或采用重新手动赋值
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;
// 因为Red数值为1开始,Green值为2 所以Color[2]为Green
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
console.log(colorName); // 显示'Green'因为上面代码里它的值是2
7.Any
当编程阶段不清楚的变量指定一个类型,它可以是任何类型的类型
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
8.Void
某种程度上来说,void类型像是与any类型相反,他没有任何类型,当一个函数没有返回值时,通常见到其返回值类型时void
function warnUser(): void {
console.log("This is my warning message");
}
9.Null 和 Undefined
underfined和null 都有各自的类型 分别就是他们本身 和void相似,他们本身类型作用不是很大
// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;
10.Never
① never类型表示的时那些永不存在的值的类型,例如 总是会抛出异常或根本就不会有返回的函数表达式或箭头函数的返回值类型,变量也可能时never类型,当他妈被用不为真的类型保护所拘束时。
② never类型时任何类型的子类型,也可以赋值给任何类型;没有类型是never是子类型或可以赋值给never类型即使nay也不可以赋值给never
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
// 推断的返回值类型为never
function fail() {
return error("Something failed");
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}
11.Object
object表示为原始类型,也就是number,string,boolean,symbol,null或undefined之外的类型 使用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
12.类型断言
类型断言好比其他语言里的类型转换,但是不进行特殊的数据检查和结构
他没有运行时的影响,只是在编译阶段起作用
第一种:尖括号语法
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
第二种:as语法
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
13.关于let
var
全局作用域,变量提升
let
块级作用域 不存在变量提升 let声明变量存在暂时性死区(即变量会绑定某个区域,不受外部影响
const
块级作用域 不可被改变 声明一个只读的常量。一旦声明,常量的值就不能改变 其他与let相同
链接: var,let,const区别.