1.泛型函數和泛型接口
function log<T>(value : T) : T{
console.log(value);
return value;
}
log<number>(1);
log<string>("1");
log<object>({});
log<string[]>(["1"])
interface Log<T> {
(value : T) : T;
}
let myLog : Log<string>= log;
myLog("string");
let myLog1 : Log<number> = log;
myLog1(1);
let myLog2 : Log<Array<string>> = log;
myLog2(["1"]);
2.泛型類與泛型約束
注意泛型不能約束靜態成員
class Log1<T> {
run (value : T) {
console.log(value);
return value;
}
}
let log1 = new Log1<number>();
log1.run(1);
3.當泛型不傳時,可以是任意類型
let log2 = new Log1();
log2.run(1);
log2.run("1");
log2.run({});
4.泛型繼承接口,實現只能傳保護length的值
interface Length {
length : number
}
function Log4<T extends Length> ( value : T) : T{
console.log(value.length)
return value;
}
Log4({length : 1});
Log4("1");
Log4([1,2,3]);