TypeScript日常类型(4): Functions

79 阅读2分钟

函数(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);

image.png

即使没有参数类型注解,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将具有的类型。

这个过程被称为上下文类型,因为函数所在的上下文告知它应该具有什么类型。

与推理规则类似,您不需要显式地学习这是如何发生的,但是了解它的发生可以帮助您注意到什么时候不需要类型注释。以后,我们将看到更多示例,说明值所处的上下文如何影响其类型。

本篇我们简单学习了函数类型相关的知识点,更深入的内容将在后面学习。