关于TypeScript中尖括号的混淆

时间:2018-01-19 09:10:27

标签: javascript typescript

我目前正在学习TypeScript,并对使用尖括号感到困惑。

我知道你可以使用它,例如对于泛型类型,括号将位于后面:

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

此外,如果您为泛型类型定义类型:

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

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

let myArr: Array<number>;

在什么情况下,括号位于单词前面?还有哪些用例可以使用尖括号?

2 个答案:

答案 0 :(得分:7)

让我们把它分解,好吗?

function myFn<T>(param: T): T {
  return param;
}
  1. function:其Typescript关键字,表示您正在声明一个函数。
  2. myFn:第1点function的名称。
  3. <T>:这意味着函数声明将使用泛型类型:要么是它要接受的参数,要么是返回类型。作为开发人员,您需要明确设置它。
  4. (param:T):您只有一个参数,名称为param。与此同时,param的类型为T,您已在第3点设置了这一类型。
  5. :T:这表示您在第1点声明的函数必须返回T类型的值。
  6. { return param }:返回param的值。请注意,这是允许的,因为param的类型为T,您的函数需要返回类型T。我们考虑另一个片段:
  7. 这是不允许的:

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

    原因0的类型为number,而不是T类型。

    让我们用纯英语:

    您宣布一个名为function的{​​{1}},它将接受myFn类型的参数,并将返回T类型的值。

    那就是它。现在,关于实际用法:

    T

    变量let identity = myFn<string>("hello world"); 将引用一个函数,该函数接收一个identity类型的参数(记住params?)。它还将返回类型string的值 - 并且根据函数声明,它将返回string

    您可以在Type Assertion of Typsecript

    上阅读更多内容

答案 1 :(得分:2)

它是type assertion的替代语法:

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

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