Они указывают генерики .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");