const areYouOk:boolean = true;
const myName: string = 'song';
const list: number[] = [1,2,4];
const list: Array = [1,2,4]
let x: [string, number];
x = ['1',1]
表示一个已知元素数量和类型的数组,元素类型不必相同
enum Color { Red, Green, Blue }
let c: Color = Color.Green;
let notSure: any = 4;
notSure = "maybe a string";
notSure = false;
永不存在的值的类型,那些总会抛出异常
或者根本不会有返回值的函数表达式或者箭头函数表达式的返回值类型
变量也可能是 nerver 类型,当他们被永不为真的类型保护所约束时
表示非原始类型,除了 number, string, boolean, symbol, null 或者 undefined之外的类型
(1): 其中 Array
即为接受参数的泛型接口,如下:
Copy interface Array < T > {
find < S extends T >( predicate : ( this : void , value : T , index : number , obj : T []) => value is S , thisArg ?: any ) : S | undefined ;
...
find ( predicate : (value : T , index : number , obj : T []) => unknown , thisArg ?: any ) : T | undefined ;
...
findIndex ( predicate : (value : T , index : number , obj : T []) => unknown , thisArg ?: any ) : number ;
...
fill (value : T , start ?: number , end ?: number ) : this ;
...
copyWithin (target : number , start : number , end ?: number ) : this ;
}
(2): 枚举
编译之后的代码需要注意:
Copy enum Color { Red, Green, Blue }
let c: Color = Color.Green; // 1
编译之后为:
var Color;
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
let c = Color.Green;
此时Color为:
{
0: Red,
1: Green,
2: Blue,
Red: 0,
Green: 1,
Blur: 2
}
因此 Color.Green = 1;
默认情况下,从0开始为元素编号,但是可以手动指定成员的数值:
Copy enum Color { Red = 1,Green = 2,Blue = 4}
此时 Color 为:
{
1: Red,
2: Green,
4: Blue,
Red: 1,
Green: 2,
Blue: 4
}
枚举的便利在于可以由枚举的值得到它的名字:
Copy enum Color { Red = 1 , Green , Blue };
let colorName : string = Color[ 2 ]; // 'Green';
(3): Any 与 Object 的区别
Object类型的变量允许你给它赋任意值,但是却不能调用它上面任意的方法,即使它真的有这些方法:
Copy let notSure: any = 4;
notSure.ifExist();
let prettySure: Object = 4.1;
prettySure.toFixed(); // error
prettySure.toString(); // true
(4): void
当函数没有返回值时,
Copy function warnUser(): void {
console.log('warn')
}
void类型没有什么大用,只能赋予 undefined 或者 null
Copy let unusable: void = undefined;
let unusable: void = null;
(5): never
Copy // 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message)
}
// 推断的返回值类型为never
function fail() {
return error('somgthing failed')
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}
(6): 类型断言
会遇到这样的情况,你比 typescript 更了解某个值的详细信息,通常发生在你清楚的知道一个实体具有比它现有类型更确切的类型。
通过类型断言告诉编译器,"相信我,我知道自己在干什么"
类型断言的两种形式:
尖括号形式
Copy let str: any = "123";
let strLength: number = (<string>str).length;
as 语法
Copy let str: any = "123";
let strLength: number = (str as string).length