在 TypeScript 开发过程中,一些常见的坏习惯可能会影响代码的质量和可维护性。
以下是 5 个需要改掉的坏习惯,帮助你提升 TypeScript 技能,编写更高效和规范的代码。
1. 不使用严格模式
错误做法 :不启用 tsconfig.json
中的严格模式。
json
// tsconfig.json
{
"compilerOptions": {
"strict": false
}
}
正确做法 :启用严格模式。
json
// tsconfig.json
{
"compilerOptions": {
"strict": true
}
}
原因 :严格模式下的规则有助于未来代码的维护,虽然在开发过程中可能会遇到更多的编译错误,但修复这些问题的时间会在后续的维护中得到回报。严格模式可以捕获更多的潜在问题,提高代码的健壮性。
2. 使用 || 确定默认值
错误做法 :使用 || 处理可选值。
javascript
function example(name: string | null | undefined) {
console.log(name || 'Default Name');
}
正确做法 :使用 ??
运算符或在参数级别定义默认值。
javascript
function example(name: string | null | undefined) {
console.log(name ?? 'Default Name');
}
原因 :??
运算符只对 null
或 undefined
进行回退,更加精确。使用 ||
时,如果 name
是一个 falsy 值(如空字符串、0 等),也会被替换为默认值,这可能导致意外行为。
3. 使用 any 作为类型
错误做法 :使用 any
类型处理不确定的数据结构。
arduino
function example(data: any) {
console.log(data);
}
正确做法 :使用 unknown
类型。
javascript
function example(data: unknown) {
console.log(data);
}
原因 :any
类型会禁用类型检查,导致潜在的错误难以捕获。unknown
类型在使用前需要进行类型检查或类型断言,确保类型安全。
4. 使用 val as SomeType
错误做法 :强制编译器推断类型。
csharp
const data = 'hello' as string;
正确做法 :使用类型守卫。
ini
const data = 'hello' satisfies string;
原因 :类型守卫确保所有检查都是明确的,减少潜在错误。使用 as
进行类型断言时,编译器不会进行类型检查,可能导致运行时错误。
5. 在测试中使用 as any
错误做法 :在测试中创建不完整的替代品。
typescript
test('example test', () => {
const mockFunction = jest.fn().mockImplementation((data: any) => {
return data;
});
});
正确做法 :将模拟逻辑移到可重用的位置。
typescript
test('example test', () => {
const mockFunction = jest.fn().mockImplementation((data: unknown) => {
return data;
});
});
原因 :避免在多个测试中重复更改属性,保持代码整洁。使用 any
会禁用类型检查,导致测试代码的可读性和可维护性下降。
通过改掉这些坏习惯,你可以编写出更高效、更规范的 TypeScript 代码,提升项目的质量和可维护性。