- 注释的妙用,通过/* /来注释Typescript类型,当我们使用相关类型的时候就会有注释的提示,这个技巧在多人协作时十分有用,不用花时间去看文档或者跳转页面去看注释
interface User {
/**
* 合法用户接口
*/
username: string;
id: number;
token: string;
avatar: string;
role: string;
}
let admin: User = {
username: "admin",
id: 1,
token: "123456",
avatar: "xxx.xxx.xxx/xxx.png",
role: "admin",
};
- 巧用类型推导,ts能根据简单的规则推断和检查变量的类型 ```typescript function add(a:number, b: number) { return a + b; }
// ts可以通过参数与return运算法推断函数的返回值为number类型
获取函数的整体的类型,可以借助typeof
```typescript
type addFn = typeof add
返回值类型复杂时,可以借助类型推导和ReturnType轻松的获取返回值类型
type returnType = ReturnType<typeof add> // number
以上的技巧在redux编码时非常有用,可以省略大量的重复代码
巧用元组,适用于批量的获取参数,并且每一个参数的类型还不一样,我们可以声明一个一个元组
function query(...args: [string, number, boolean]) {
const d: string = args[0];
const n: number = args[1];
const b: boolean = args[2];
}
巧用Omit, 适用于复用一个类型,但是又不需要此类型中的全部属性,因此需要剔除某些属性 ```typescript interface User { /**
- 合法用户接口 */ username: string; id: number; token: string; avatar: string; role: string; }
type UserWithoutToken = Omit
常用再React的父组件向子组件传递数据的时候,通常需要复用父组件的props类型,但是又需要剔除一些无用的类型
5. 使用Record, Record允许从Union类型中创建新类型,Union类型中的值作为新类型的属性
```typescript
// 简单的汽车品牌年龄表
type Car = "Audi"| "BMW" | "MercedesBenz"
const cars = {
Audi: { age: 119 },
BMW: { age: 113 },
MercedesBenz: { age: 133 },
}
//潜在的类型安全的问题
// 1. 忘记写一个汽车品牌,会报错吗?
// 2. 拼写属性错误,会报错吗?
// 3. 添加一个非上述是三个品牌的品牌进去,会报错吗?
// 4. 更改其中一个品牌的名字,他会有报错提醒吗?
// 借助Record即可解决
type Car = "Audi"| "BMW" | "MercedesBenz"
type CarList = Record<Card, {age: number}>
type Car = "Audi" | "BMW" | "MercedesBenz";
type CarList = Record<Car, { age: number }>;
const cars: CarList = {
Audi: { age: 119 },
BMW: { age: 113 },
MercedesBenz: { age: 133 },
};
- 巧用类型约束, 在.tsx文件中,泛型可能会被当做jsx标签
```typescript
const toArray =
(element: T) => [element]; // Error
// 加上逗号,或者extends都可以解决
const toArray =
小结
- 巧用注释
- 类型推导,typeof, ReturnType
- 巧用元组,批量获取参数
- 巧用Omit,复用类型,剔除其中不需要的属性
- 使用Record, 类型安全
- 巧用类型约束,tsx中泛型会被当做jsx标签