打字稿中像methodname<string>()这样的尖括号有什么用

Uma*_*Saw 3 javascript angularjs typescript

如果有关于为什么我们在类型脚本中使用尖括号 <> 的任何教程,请帮助我,例如我在这里给出了一些代码我需要解释。

export class HomePage {

     constructor(public navCtrl: NavController) {
         let a = this.testfunc<boolean>(4);
         console.log(a);
     }

     testfunc<T>(s) {
         return s;
     }
}
Run Code Online (Sandbox Code Playgroud)

谢谢

T.J*_*der 6

那些表示泛型testfunc<T>(s){ return s; }表示testfunc接受泛型类型参数Ttestfunc<boolean>(4)为该类型参数提供一个类型参数 ( boolean)。在那个例子中,它没有做任何事情,因为testfunc不使用T,但请考虑:

function foo(arg: string) {
    let numbers: Array<number> = [];
    numbers[0] = arg; // Error: Type 'string' is not assignable to type 'number'.
}
Run Code Online (Sandbox Code Playgroud)

声明numbersnumber. 由于arg是一个字符串,你不能做numbers[0] = arg.

与之比较:

function foo<T>(arg: T) {
    let numbers: Array<T> = [];
    numbers[0] = arg; // Error    
}
Run Code Online (Sandbox Code Playgroud)

现在,foo不知道numbers包含什么,只是它包含的任何内容都将匹配arg. 所以这两个调用都是有效的:

foo<number>(4);
foo<string>("bar");
Run Code Online (Sandbox Code Playgroud)

我在那些强调的调用中包含了类型参数,但 TypeScript 可以在大部分时间推断它们:

foo(4);
foo("bar");
Run Code Online (Sandbox Code Playgroud)