一、啥是 TypeScript 严格模式

TypeScript 是 JavaScript 的超集,它给 JavaScript 加上了静态类型检查的功能。严格模式呢,就是 TypeScript 里的一个“紧箍咒”,能让代码更严谨。在严格模式下,TypeScript 会更严格地检查代码里的类型,帮咱们提前发现一些潜在的运行时错误。

咱先看看怎么开启严格模式。在 tsconfig.json 文件里,把 strict 选项设置成 true 就行啦。像这样:

// TypeScript 技术栈
{
  "compilerOptions": {
    "strict": true,
    "target": "ES6",
    "module": "commonjs"
  },
  "include": ["src/**/*.ts"]
}

这里把 strict 设为 true,就开启了严格模式。开启之后,TypeScript 会对代码进行更严格的类型检查。

二、严格类型检查的好处

提前发现错误

严格类型检查能在编译阶段就发现很多潜在的运行时错误。比如说,咱们写个函数,接收一个数字参数,返回这个数字的平方:

// TypeScript 技术栈
function square(num: number): number {
  return num * num;
}

// 这里传入一个字符串,TypeScript 会报错
// const result = square('hello'); 
const result = square(5);
console.log(result); 

在严格模式下,如果咱们不小心传入了一个字符串,TypeScript 会马上报错,避免在运行时才发现问题。

提高代码可读性

严格类型让代码的意图更清晰。别人看代码的时候,一眼就能知道每个变量和函数的类型,理解代码就更容易啦。比如下面这个例子:

// TypeScript 技术栈
// 定义一个 Person 接口
interface Person {
  name: string;
  age: number;
}

// 定义一个函数,接收一个 Person 类型的参数
function printPerson(person: Person) {
  console.log(`Name: ${person.name}, Age: ${person.age}`);
}

const person: Person = { name: 'John', age: 30 };
printPerson(person);

这里通过接口定义了 Person 类型,函数接收这个类型的参数,代码的可读性就提高了。

方便重构

当代码需要重构的时候,严格类型能帮咱们更安全地修改代码。因为类型检查会提示咱们哪些地方需要修改,避免引入新的错误。

三、严格模式下的常见类型检查

空值检查

在严格模式下,TypeScript 会检查变量是否可能为 nullundefined。比如:

// TypeScript 技术栈
function printName(name: string | null) {
  if (name) {
    console.log(name);
  } else {
    console.log('Name is null or undefined');
  }
}

printName(null); 
printName('Alice'); 

这里 name 参数可能是 string 类型,也可能是 null。在使用 name 之前,需要先检查它是否为 nullundefined,否则 TypeScript 会报错。

类型兼容性检查

TypeScript 会检查类型之间的兼容性。比如,一个函数接收一个 number 类型的参数,就不能传入一个 string 类型的值。

// TypeScript 技术栈
function add(a: number, b: number): number {
  return a + b;
}

// 这里传入字符串,TypeScript 会报错
// const result = add('1', '2'); 
const result = add(1, 2);
console.log(result); 

函数参数和返回值类型检查

严格模式会检查函数的参数和返回值类型是否匹配。比如:

// TypeScript 技术栈
function getFullName(firstName: string, lastName: string): string {
  return `${firstName} ${lastName}`;
}

// 这里返回值类型不匹配,TypeScript 会报错
// function getFullNameWrong(firstName: string, lastName: string): number {
//   return 123;
// }

const fullName = getFullName('John', 'Doe');
console.log(fullName); 

四、应用场景

大型项目开发

在大型项目里,代码量很大,人员协作也多。严格模式能帮助团队成员更好地理解和维护代码,减少错误。比如一个电商项目,有很多模块和功能,使用严格模式可以让不同模块之间的交互更安全。

复杂业务逻辑处理

当业务逻辑比较复杂的时候,严格类型能让代码更清晰。比如一个金融系统,涉及到各种数据的计算和处理,使用严格模式可以避免因类型错误导致的计算错误。

与后端交互

在前后端交互的时候,严格类型可以确保数据的正确性。比如前端发送一个请求,需要明确请求参数和响应数据的类型,使用严格模式可以避免因数据类型不匹配导致的问题。

五、技术优缺点

优点

  • 提高代码质量:通过提前发现错误,减少运行时错误,提高代码的稳定性。
  • 增强可读性:类型注解让代码更易理解,方便团队协作。
  • 方便维护:在代码修改和重构时,类型检查能提供更安全的保障。

缺点

  • 学习成本:对于初学者来说,TypeScript 的类型系统可能比较复杂,需要一定的时间来学习和掌握。
  • 开发效率:在编写代码时,需要额外添加类型注解,可能会降低一些开发效率。

六、注意事项

合理使用类型断言

类型断言可以让咱们告诉 TypeScript 某个变量的具体类型。但要注意,过度使用类型断言可能会绕过类型检查,导致潜在的错误。比如:

// TypeScript 技术栈
const value: any = 'hello';
// 这里使用类型断言将 value 转换为 number 类型
const num = value as number;
// 这样可能会导致运行时错误
console.log(num.toFixed(2)); 

避免使用 any 类型

any 类型会绕过 TypeScript 的类型检查,失去了严格模式的意义。尽量明确变量的类型,避免使用 any

及时更新 tsconfig.json

随着项目的发展,可能需要调整 tsconfig.json 里的配置。比如添加新的类型检查规则,或者调整编译选项。

七、文章总结

TypeScript 严格模式是一个非常有用的工具,它能帮助咱们避免很多潜在的运行时错误,提高代码的质量和可维护性。通过严格类型检查,能提前发现错误,增强代码的可读性,方便代码的重构和维护。在大型项目、复杂业务逻辑处理和前后端交互等场景中,严格模式都能发挥重要作用。不过,使用严格模式也有一些注意事项,比如合理使用类型断言、避免使用 any 类型等。总之,掌握 TypeScript 严格模式,能让咱们的开发工作更加高效和安全。