TypeScript 支持使用 rest 参数 和 解构 的函数的精确类型。这对于接受可变数量参数或复杂对象的函数尤其重要。
解构 在函数参数中允许明确指定预期属性的结构:
function printUser({ name, age }: { name: string; age: number }) { console.log(`${name} (${age})`); }
Rest 参数 允许指定可变数量的参数及其类型:
function sum(...numbers: number[]): number { return numbers.reduce((acc, cur) => acc + cur, 0); }
组合使用在接受主要对象和额外参数数组的函数中很常见:
function logEvent(event: { type: string }, ...meta: any[]) { console.log(event.type, meta.join(',')); }
正确的类型化可以在执行代码之前识别错误,但错误的类型化会导致类型安全性的丧失和运行时错误。
如何为具有默认解构参数的函数指定类型并使其变为可选?
许多人指定了对象的类型,但忘记使每个字段可选或同时与类型一起指定默认值:
function foo({x = 1, y = 2}: {x?: number; y?: number} = {}) { console.log(x, y); }
在这里,默认值被指定,并且所有参数通过 ? 变为可选。如没有这一点,没有参数的调用将引发错误,尽管预期有默认值。
故事
undefined 没有属性 name。故事
any[],这允许传递不仅仅是数字。在生产环境中,突然将数字和字符串相加,导致报告中的结果不正确。故事
使用了解构与深嵌套对象,但未指定嵌套类型。因此,TS “迷失了”,未提示缺少对象中的必需字段,导致在客户端出现 TypeError: Cannot read property 'id' of undefined 的错误。