简介
- ts 是由微软开发的开源编程语言
- ts 是 js 的超集
- ts 是开发大型应用的基石
- ts 提供了更丰富的语法提示
-
数据类型
js 数据类型
- 原始数据类型:
boolean string number null undefined symbol - 引用数据类型:
object
- 原始数据类型:
ts 类型注解
// 字符串类性注解let myName: string = "hao";// 数字类性注解let num: number = 123;// 布尔类性注解let bool: boolean = true;// any类性注解 (能不用尽量不用)// 1. 可以是任意数据类型// 2. 如果是对象的话,any是不会提示原有的属性和方法// 3. 未被初始值的变量类型就是 anylet notSure = 333; // 默认 -> let notSure: any = 333;// isOk ↓notSure = "maybe a string instead";notSure = false;// void(无任何类型) 在某种程度上与 any 相反 (一般自会用在函数的返回值为空时)function fn (): void {console.log("我没有任何返回值哦");return undefined; // -> 返回undefined也可以 因为函数无返回值是默认返回undefined;}//never 表示是那些永远不存在的值的类型function error (msg: string): never {throw new Error(msg);}function infinteloop(): never {while(true) {};}// --------------原始类型↑----------------// object -> 表示非原始类型let obj: object | null;// all ok ↓obj = {a: 1};obj = null;obj = [];obj = () => {};// all wrong ↓obj = undefined;obj = false;obj = "1";obj = 2;
ts 类型推断
let count = 0; // ts能够正确推断出count: number;let addFn = (a, b) => { // ts这里就不能推断出函数参数的类型 需要手中注解 a: number, b: numberreturn a + b;};addFn(1, 2);
ts 类型断言
有时候你可能比 ts 更清楚某个值的类型信息,你就可以进行类型断言。
有两种语法 一种是 as 语法, 另一种是<类型>语法。
let someVal: any = "hihihi~";let length: number = (someVal as string).length;let length: number = (<string>someVal).length;
联合类型
多个类型当中我们可以选择其中类型的一种即可。
注意:
ts
let a: string = "123";a = 123 // -> 提示 不能将类型123分配给类型"string"console.log(a);
js
let a = "123";a = 123;console.log(a); // -> 123
接口 interface
- 对象的形状进行描述
- 对类的一部分行为的抽象 ```typescript interface Person { // 不可多,也不可少 readonly id: number; // -> 只读属性 name: string; // -> 必有属性 age?: number; // -> 可选属性 [propName: string]: any // 任意属性(固定写法) 类型必须为any }
let person: Person { id: 001, name: “xiaoA”, age: 22, // 这个属性可以没有 sex: “male” }
person.id = 002; // -> 报错
<a name="j2FyF"></a>## 数组1. 类型 `let list: number[] = [1, 2, 3]`**注:没有长度限制,push 非类型的数据是不可以的。**2. 泛型 `let list Array<number> = [1, 2, 3]`2. interface 方式```typescriptinterface NumList {[index: number]: number}let list: NumList = [1, 2, 3]; // -> ok// 类数组interface Args {[index: number]: any;length: number;callee: Function;}function fn() {// IArguments 结构就是 Args 的结构let args: IArguments = arguments;}fn(1);
函数
声明函数
function test (a: number, b: number): number {return a + b;}test(1, 2);
表达式函数
let test = function (a: number, b: number): number {return a + b;}//--------[ 这里就是函数的注解 ]----------------let test: (a: number, b: number) => number = function (a, b) {return a + b;}
可选参数、 默认值<br />**注: 默认值、收集多余参数一定是放到最后面才可以**
// 可选参数function fullName (firstName: string, LastName?: string): string {return firstName + " " + LastName;}// all ok ↓fullName("troye", "siven");fullName("troye");// 默认值let buildName (firstName: stirng, LastName = "orz"): string {return firstName + " " + LastName;}buildName("Tommy", "shelby");buildName("XD");// 剩余参数let longName (firstName: stirng, secondName: string, ...restName: string[]): string {return firstName + " " + secondName + " " + restName.join(" ");}
重载
// 表意会更清晰function reverse (x: string): string;function reverse (x: number): number;function reverse (x: string | number) {if (typeof x === "string") {return x.split("").reverse().join("");}if (typeof x === "number") {return Number(x.toString().split("").reverse().join(""));}}console.log(reverse("123"));console.log(reverse(123));
