TypeScript 如何做默认参数类型

刚接触编程的朋友,应该都遇过这种“填坑”经历:写JS的时候,给函数参数设个默认值,结果传了个不对类型的值进去,控制台就乱飘红色错误,运行还莫名其妙崩了。这其实是JavaScript的“灵活”带来的小麻烦——它不会主动提醒你参数类型不对,全靠开发者自己盯。而TypeScript就是来帮你解决这个问题的,其中“默认参数类型”就是最实用的小工具之一。

先搞懂:默认参数类型到底是什么?

简单说,它就是TypeScript给函数参数加的“类型约定”,哪怕你给参数设了默认值,也能帮你自动盯牢“传进来的值合不合适”。举个生活化的例子:你开了杯热奶茶,默认是全糖加珍珠(这就像默认参数),但如果给你递了杯全糖加香菜的奶茶(这就像传了不对类型的参数),TypeScript会提前拦住,不让你用错。

TypeScript 如何做默认参数类型

怎么给默认参数设类型?

操作其实特别简单,就跟给普通变量设类型一样,在参数后面加个:类型就行,默认值写在等号后面。比如写个给宠物算零食量的函数:

`typescript

// 给默认参数设string类型,默认值是"小狗狗"

function getSnackAmount(pet: string = "小狗狗") {

return ${pet}的零食量:50g;

}

`

这时候如果传getSnackAmount("小猫咪"),没问题;但如果传getSnackAmount(123),TypeScript会直接标红错误,说“数字类型不对,应该传字符串”,比JS及时多了。

容易踩的小坑:默认值和类型要对应

这里有个要注意的点:默认值的类型得和你设的参数类型一致,不然TypeScript会报错。比如你写function getSnackAmount(pet: string = 123),这就不对了——你定的是字符串类型,默认值却是数字,相当于“默认用123当宠物,这不是个宠物”,逻辑不通,所以编译器会拦你。

再举个实际的开发例子,比如做用户注册的函数,默认给新用户设昵称:

`typescript

// 设昵称类型为string,默认值是"新用户"

function createUser(nickname: string = "新用户") {

return 用户${nickname}注册成功;

}

`

如果有人误传createUser(true),TypeScript会直接提醒“布尔类型不能赋值给string”,避免了后面把昵称当字符串用时出现的各种奇怪问题。

进阶一点:默认参数也能设复杂类型

不止是数字、字符串这种简单类型,就算是对象、数组这种复杂类型,默认参数的类型约定也能用。比如给购物车加默认商品的函数:

`typescript

// 定义一个商品接口,设默认值是符合这个格式的对象

interface Product {

name: string;

price: number;

}

function addToCart(product: Product = { name: "矿泉水", price: 2 }) {

return 加入购物车:${product.name},价格${product.price}元;

}

`

这时候如果传addToCart({ name: 123, price: "十块" }),TypeScript会分别提醒“name得是字符串”“price得是数字”,不用等运行时才发现商品信息不对。

其实TypeScript的默认参数类型,核心就是“提前约定、提前检查”,就像你点外卖时备注“不要辣”,商家会提前按你的要求做,而不是等你拿到辣的才发现不对。这个小工具虽然简单,但能帮你避开很多开发时的低级错误,让代码更稳更省心。

上一篇 TypeScript React 组件类型怎么写