name: typescript-strict
description: 严格的TypeScript规则。在编写任何TypeScript代码时使用。
严格的TypeScript标准
规则
1. 禁止使用 any
// 绝对禁止
function process(data: any) {}
// 正确做法
function process(data: unknown) {
if (isValidData(data)) { /* 使用 data */ }
}
2. 显式返回类型
// 绝对禁止
function getUser(id: string) { return db.find(id); }
// 正确做法
function getUser(id: string): Promise<User | null> { return db.find(id); }
3. 类型化错误处理
// 绝对禁止
catch (e) { console.log(e.message); }
// 正确做法
catch (error: unknown) {
if (error instanceof AppError) { logger.error(error.message); }
else if (error instanceof Error) { logger.error(error.message); }
else { logger.error('未知错误', { error }); }
}
4. 禁止无解释的类型断言
// 绝对禁止
const user = users.find(u => u.id === id)!;
// 正确做法
const user = users.find(u => u.id === id);
if (!user) throw new NotFoundError(`用户 ${id} 未找到`);
5. 在明显的情况下优先使用类型推断
// 不必要 - 类型会被推断
const count: number = 5;
// 良好 - 类型会被推断
const count = 5;
// 良好 - 函数签名需要显式类型
function add(a: number, b: number): number {
return a + b;
}
6. 使用可辨识联合类型
// 正确做法
type Result<T> =
| { success: true; data: T }
| { success: false; error: string };
function handle(result: Result<User>) {
if (result.success) {
// TypeScript知道result.data存在
console.log(result.data.name);
} else {
// TypeScript知道result.error存在
console.log(result.error);
}
}
快速参考
| 模式 |
状态 |
any |
绝对禁止 |
| 隐式返回 |
绝对禁止 |
无注释的 ! |
绝对禁止 |
// @ts-ignore |
绝对禁止 |
as 类型转换 |
尽量减少 |
unknown + 类型守卫 |
推荐使用 |