TypeScript:让JavaScript不再"任性妄为"

38 阅读3分钟

JavaScript作为一门动态类型语言,就像个调皮的孩子,经常给你搞点"惊喜"——你以为变量是字符串,结果运行时它变成了数字;你以为函数返回对象,结果它返回了undefined。而TypeScript的出现,就像是给这个调皮孩子请了个严格的家庭教师,强制要求变量必须"从一而终"

静态类型:给变量上"户口"

在TypeScript中,声明变量时需要同时指定它的类型,就像给变量上了个"户口":

let name: string = "张三";
let age: number = 18;
let isStudent: boolean = true;

这样一来,如果你试图给name赋值一个数字,TypeScript编译器就会立刻对你发出警告:"嘿!你给字符串变量赋数字,这不合规矩!"。

类型推断:TypeScript的"读心术"

当然,TypeScript也不是那么死板。它自带一种神奇的"读心术"——类型推断。当你给变量赋值时,它能根据等号右边的值自动推断出变量的类型:

let name = "张三"; // TypeScript自动推断name为string类型
let age = 18;     // 自动推断为number类型

这就像是你买了杯奶茶,店员看到你加了珍珠,就自动默认你要的是"珍珠奶茶",而不是反复问你"你确定要珍珠吗?要加糖吗?要加冰吗?"

TypeScript的"类型全家桶"

TypeScript提供了丰富的类型系统,让我们来认识一下这个"大家庭":

基础类型:编程世界的"原子"

  • string、number、boolean:这三个是最基础的类型,就像编程世界的"原子",构成了我们代码的基本元素。
  • bigint、symbol:这两个是比较新的类型,bigint用来处理超大整数,symbol用来创建唯一标识符,就像是类型世界的"特种兵"。
  • undefined、null:这两个是JavaScript的老熟人,但在TypeScript中它们也有了正式的"身份"。

特殊类型:编程世界的"变形金刚"

  • any:这是TypeScript里的"万能钥匙",可以代表任何类型。但要慎用,用多了就失去了TypeScript的意义,就像你买了辆跑车却每天只用来买菜。
  • unknown:这是any的"乖弟弟",同样可以代表任何类型,但使用时需要先进行类型检查,就像你拿到一个包裹,必须先检查里面是什么才能使用。
  • never:这是最特殊的类型,表示"永远不存在的值",就像是数学中的"空集",在处理异常和不可能的情况时非常有用。

对象类型:编程世界的"乐高积木"

  • Object vs object:这两个看起来很像,但其实区别很大。Object是"广义对象",约等于any;而object是"狭义对象",只包含对象、数组和函数。就像是"水果"和"苹果"的区别。
  • type vs interface:这两个都是用来定义自定义类型的工具,就像是编程世界的"乐高积木说明书"。type更灵活,可以定义各种类型;interface更面向对象,适合定义对象结构。

写在最后

TypeScript就像是给JavaScript穿上了一件"类型安全"的防弹衣,让你的代码更加健壮、可维护。虽然刚开始学习时可能会觉得有点约束,但一旦习惯了这种"安全感",你就再也回不去了!

如果你还在为JavaScript的"任性妄为"而苦恼,不妨试试看TypeScript,相信我,它会让你的编程体验提升到一个新的高度!

最后送大家一句话:"类型安全不是束缚,而是代码的护城河!" 共勉之~