TypeScript中关于尖括号的困惑

18

我目前正在学习TypeScript,对于角括号的使用有些困惑。

我知道可以在泛型类型中使用它,此时角括号应该放在类型名称后面:

function myFn<T>(param: T): T {
  return param;
}

此外,如果您为通用类型定义了一个类型:
let identity = myFn<string>("hello world");

对于数组,您可以使用以下两种方式之一来定义数组中的类型:

let myArr: Array<number>;

在什么情况下会在单词前使用括号?使用尖括号的其他用途有哪些?

这里需要复制http://www.typescriptlang.org/docs/handbook/generics.html的内容吗? :) - smnbbrv
1
是的,我已经通读了手册中的通用部分。显然,那是我理解的部分。但是阅读文档的其余部分时,有很多示例并不真正清楚我应该如何使用尖括号。特别是当它首次出现而不是在后面时。 - SeBe
7
谢谢你,队长显而易见。正如我告诉你的那样,我正在阅读那本手册,但这并不意味着你能理解其中的每一部分。 - SeBe
2个回答

62

让我们来分解一下,好吗?

function myFn<T>(param: T): T {
  return param;
}
  1. function: 这是Typescript的关键词,表示你正在声明一个函数。
  2. myFn: 是第一项中函数的名称。
  3. <T>: 这意味着函数声明将使用通用类型: 要么在它将要接收的参数中,要么在返回类型中。您作为开发人员需要明确设置它。
  4. (param:T): 仅有一个参数,名称为param。同时,param是类型T,如第3点所述。
  5. :T: 表示您在第1点中声明的函数必须返回类型为T的值。
  6. { return param }: 返回param的值。请注意,这是允许的,因为param是类型T,而您的函数需要返回类型T。现在考虑另一个片段:

这是被禁止的:

function myFn<T>(param: T): T {
  return 0;
}

原因是 0 是一个 number 类型,而不是 T 类型。

用简单的英语来说:

你正在声明一个名为 myFn 的函数,它将接受一个类型为 T 的参数,并返回一个类型为 T 的值。

就是这样。现在,看真实的用法:

let identity = myFn<string>("hello world");

变量identity将是一个函数引用,该函数接受参数(记得参数吗?)的类型为string。它也将返回类型为string的值--根据函数声明,它将返回"hello world"
你可以在TypeScript的类型断言中阅读更多信息。

很好的解释 - j obe

14

这是一种 类型断言 的替代语法:

let a = 1 as any;
// is equivalent to
let a = <any>1;

当您希望编译器将值视为特定类型(与已为其分配或推断的类型不同)时,这将非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接