如果有任何教程可以帮助我,为什么我们在类型脚本中使用尖括号<>,例如,我在此处给出了一些代码,需要解释。
export class HomePage {
constructor(public navCtrl: NavController) {
let a = this.testfunc<boolean>(4);
console.log(a);
}
testfunc<T>(s) {
return s;
}
}
谢谢
答案 0 :(得分:4)
这些指示generics。 testfunc<T>(s){ return s; }
表示testfunc
接受通用类型参数T
。 testfunc<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
都必须是字符串,其他类型也是如此。