TypeScript 类型推导怎么用

在写代码时,你有没有过这种经历:给变量赋值后,明明没写任何注释,编辑器却能自动弹出变量的类型提示,还能帮你排查拼写错误?这背后其实是TypeScript的“类型推导”在起作用。简单说,它就像个细心的小助手,不用你特意标注类型,就能自动搞懂代码里每个东西的类型。

最基础的:变量赋值时的推导

先看个最简单的例子:你给一个变量赋值成字符串,TypeScript会自动认定这个变量是string类型。比如写let userName = "张三";,你没写string,但之后如果手滑写成userName = 123;,编辑器会直接标红——因为它知道userName是字符串类型,不能存数字。这就像你给水杯倒了橙汁,之后再倒可乐就会洒出来,杯子的类型早就定好了。

TypeScript 类型推导怎么用

函数返回值的自动推导

再看函数,你不用特意说“这个函数返回数字”,TypeScript自己会算。比如写个加数字的函数:function add(a, b) { return a + b; },它能自动推导出这个函数的返回值是数字类型。要是你给add("1", "2")传两个字符串,它也能知道返回值是字符串——毕竟字符串相加是拼接,和数字相加的结果不一样。这就像你用搅拌机搅拌不同的东西,它能根据原料自动判断最终混合物的类型。

别踩坑:小心“any”类型

不过有个容易踩的坑:如果变量没赋值,只写了let age;,TypeScript会默认给它any类型,也就是“啥都能装”。这就像你拿了个没贴标签的空箱子,啥都能往里放,完全没类型提示,和用JavaScript没区别,还不如直接写JavaScript。所以一定要记得,变量要么一开始就赋值,要么特意标注类型,比如let age: number;,这样才不会失去TypeScript的好处。

更实用的:对象和数组的推导

对象的推导也很有意思。比如你写let user = { name: "李四", age: 25 };,TypeScript会自动给user.name设成string,user.age设成number。要是你想加个新属性user.gender = "男";没问题,但要是想把user.age改成"二十六",就会标红——因为age的类型已经固定成数字了。数组也是一样,比如let fruits = ["苹果", "香蕉"];,它会知道这是字符串数组,之后加数字就会报错。这就像给储物柜分了格子,每个格子只能放对应类型的东西,放错了就打不开门。

什么时候需要手动写类型?

虽然推导很方便,但有些场景还是要手动标注。比如写一个空数组:let numbers = [];,推导出来会是any[],这时候要改成let numbers: number[] = [];,之后加数字才不会错。还有函数返回值不明确的时候,比如一个函数可能返回数字也可能返回null,这时候手动写function findUser(id: number): number | null { ... },比让TypeScript瞎猜更稳妥。

其实TypeScript的类型推导不是“强制要求”,而是“帮你省力气”。你不用像写Java那样每个变量都标类型,也不用像写纯JS那样啥都不管,刚好卡在中间——既能享受类型安全,又不用写冗余代码。下次写代码时,留意下编辑器的提示,你会发现这个小助手能帮你避开好多低级错误,写代码也更省心。

上一篇 揭秘Swift编程语言的核心特性与实用应用场景