基础类型
boolean
let bool:boolean = true;
console.log('bool: ', bool, "type: ", typeof bool);
number
let num:number = 10;
console.log('num: ', num, "type: ", typeof num);
string
let str:string = "str123";
console.log('str: ', str, "type: ", typeof str);
Array<>
let arr:Array<number> = [1,2,3];
console.log("arr: ", arr, "type: ", typeof arr);
enum
enum Color {red, bule, yellow}
let colvalue: Color = Color.bule;
console.log("enum: ", colvalue, "type: ", typeof colvalue);
tuple
let x:[string, number] = ["ABC", 123];
console.log("tuple : ", x,"type: ", typeof x);
let y:[string, number, string] = ["ABC", 123, "DEF"];
console.log("three tuple : ", y,"type: ", typeof y);
any
let arrany:any = ["ABC", 123];
console.log("arrany: ", arrany, "type: ", typeof arrany);
void
function fun():void{
}
null和 undefined
- 默认情况下null和undefined是所有类型的子类型。
- strictNullChecks: null和undefined只能赋值给void和它们各自。
never类型表示的是那些永不存在的值的类型。
- never类型是任何类型的子类型,也可以赋值给任何类型;
- 没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。
object
let obj:object = {"ABC":123};
console.log("obj: ", obj["ABC"], "type: ", typeof obj);
类型断言 即 类型转化
- 类型断言有两种形式。 其一是“尖括号”语法:
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
- 另一个为as语法:
let strLength1: number = (someValue as string).length;
变量声明
var 作用域: 函数作用域或全局作用域
- 多次声明同一个变量并不会报错
let : 块作用域
-
暂时性死区: 不能在被声明之前读或写。 虽然这些变量始终“存在”于它们的作用域里,但在直到声明它的代码之前的区域都属于暂时性死区。
-
块级作用域变量需要在明显不同的块里声明
- 不能在1个作用域里多次声明
-
屏蔽: 在一个嵌套作用域里引入一个新名字的行为称做屏蔽。
function f(condition, x) { if (condition) { let x = 100; return x; } return x; }
const: 块作用域
- 不能对它们重新赋值, 引用的值是不可变的