一、基础类型:
1)布尔值:
let isDone: boolean = false;
2)数字: (支持十、十六、八、二进制)
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
3)字符串: (""、''、可使模版字符串*)
let name: string = "bob";
let sentence: string = `Hello, my name is ${ name }. I'll be ${ age + 1 } years old next month.`;
4)枚举: (可为一组数值赋予友好的名字,---默认情况下,从0开始为元素编号,y也可以设置,如Red = 1,则Green=2,或者直接分别赋值)
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
console.log(colorName); // 显示'Green'因为上面代码里它的值是2
5)任何类型: (类型检查器对这些值不进行检查,直接通过编译阶段)
let list: any[] = [1, true, "free"];
或
let notSure: any = 4;
6)无任何类型: (void类型像是与any类型相反,它表示没有任何类型)
function warnUser(): void {
console.log("This is my warning message");
}
或:
let unusable: void = undefined; //声明一个`void`类型的变量没有什么大用,因为你只能为它赋予`undefined`和`null`:
7)元组: (元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同)
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'
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型
console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString
x[6] = true; // Error, 布尔不是(string | number)类型
----------------- 元组和数组类似,但是类型注解时会不一样 -------------------------------
----------- 赋值的类型、位置、个数需要和定义(生明)的类型、位置、个数一致------------------
// 数组 某个位置的值可以是注解中的任何一个
const LOL: (string | number)[] = ["zed", 25, "darts"];
// 元祖 每一项数据类型必须一致
const LOL: [string, string, number] = ["zed", "darts", 25];
二、对象类型
1) 一般声明都用interface,需要用到其他变量类型,type多一些 ; interface 可以进行`声明合并`,type 不行
interface Hero {
name: string;
age: number;
skill: string;
skinNum?: number;
say(): string; // say函数返回值为string
[propname: string]: any; // 当前Hero可定义任意字符串类型的key
}
// 继承
interface littleSoldier extends Hero {
rush(): string;
}
// 任意类型
interface IAnyObject {
[key: string]: any;
}
type Hero = {
name: string,
age: number,
skill: string,
skinNum?: number,
};
三、数组类型:
(数组泛型Array<元素类型>)
interface IItem {
id: number;
name: string;
isGod: boolean;
}
const objectArr: IItem[] = [{ id: 1, name: '俊劫', isGod: true }];
// or
const objectArr: Array<IItem> = [{ id: 1, name: '俊劫', isGod: true }];
const numberArr: number[] = [1, 2, 3];
const arr: (number | string)[] = [1, "string", 2];
四、类型断言:
(知道类型的情况下使用,两种形式都可用,较推荐as )
1)“尖括号”语法:
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
2)`as`语法 (在TypeScript里使用JSX时,只有 `as`语法断言是被允许的)
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
五、解构数组:
1)作用于函数参数:
function f([first, second]: [number, number]) {
console.log(first);
console.log(second);
}
f(input);
2)使用`...`语法创建剩余变量
let [first, ...rest] = [1, 2, 3, 4];
console.log(first); // outputs 1
console.log(rest); // outputs [ 2, 3, 4 ]
后期再补充常用的
六、对象解构:
1)## 函数声明
type C = { a: string, b?: number };
function f({ a, b }: C): void {
// ...
}
或:
function f({ a="", b=0 } = {}): void {
// ...
}
f();