打字稿

时间:2018-09-27 07:11:36

标签: javascript angularjs typescript

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

export class HomePage {

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

     testfunc<T>(s) {
         return s;
     }
}

谢谢

2 个答案:

答案 0 :(得分:4)

这些指示genericstestfunc<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'.
}

这将numbers声明为number的数组。由于arg是字符串,因此无法执行numbers[0] = arg

比较:

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

现在,foo不知道numbers包含什么,只是它包含的内容将与arg的类型匹配。因此,这两个调用均有效:

foo<number>(4);
foo<string>("bar");

我已经在强调调用中包括了类型参数,但是TypeScript可以在很多时候推断出它们:

foo(4);
foo("bar");

答案 1 :(得分:2)

那些尖括号被称为泛型。泛型允许您为字段的类型,类的方法定义占位符。
它只是允许在以后定义类型。

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

    testfunc<T>(s){
         return s;
    }
}

对于您的testFunc方法,您只需创建一个可以接受任何数据类型的方法。尖括号之间的T称为类型实参。

使用泛型为您提供了其他方面无法获得的自由。例如,使用通用方法,我可以传入任何类型作为其类型参数。

函数兰德(值:T){    ... }

T设置为string意味着该函数中的每个T都必须是字符串,其他类型也是如此。