函数(Functions)
函数是 JavaScript 中 传递数据的主要方式。TypeScript 允许你为函数的 输入参数 和 返回值 指定类型。
参数类型注解(Parameter Type Annotations)
在声明函数时,可以在 参数名后 添加 类型注解 来指定参数的类型:
// Parameter type annotation
function greet(name: string) {
console.log("Hello, " + name + "!");
}
当参数有类型注解时,传递给函数的参数将会被检查
// Argument of type 'number' is not assignable to parameter of type 'string'.
greet(100);
即使没有参数类型注解,TypeScript 仍然会检查传入的参数数量,确保调用时参数数量正确。
返回值类型注解(Return Type Annotations)
可以在 参数列表后 指定 返回值的类型:
function getStudentNumber(): number {
return 7;
}
就像变量的类型注解一样,通常不需要为返回值添加类型注解,因为 TypeScript 会根据函数的返回语句推断其返回类型。上面示例中的类型注解并不会产生任何影响。一些代码库会明确指定返回类型,以用于文档说明、防止意外更改,或仅仅是个人习惯。
返回 Promise 的函数
如果要为返回 Promise 的函数添加返回类型注解,应使用 Promise 类型:
async function getStudentNumber(): Promise<number> {
return 26;
}
匿名函数
匿名函数与函数声明稍有不同。当 TypeScript 能够确定函数的调用方式时,该函数的参数会自动推断出类型。
const names = ["洛尘", "洛洛默", "merlinc"];
// 上下文类型推断 - 参数 s 被推断为 string 类型
names.forEach(function (s) {
console.log(s.toUpperCase());
});
// 上下文类型推断同样适用于箭头函数 - 参数 s 被推断为 string 类型
names.forEach((s) => {
console.log(s.toUpperCase());
});
尽管参数s没有类型注释,TypeScript还是使用了forEach函数的类型,以及数组的推断类型,来确定s将具有的类型。
这个过程被称为上下文类型,因为函数所在的上下文告知它应该具有什么类型。
与推理规则类似,您不需要显式地学习这是如何发生的,但是了解它的发生可以帮助您注意到什么时候不需要类型注释。以后,我们将看到更多示例,说明值所处的上下文如何影响其类型。
本篇我们简单学习了函数类型相关的知识点,更深入的内容将在后面学习。