定义泛型的方式
const foo = <T,>(value: T): T => value;
// using
const returnStr = foo<string>('foo')
const returnNum = foo<number>(1)
也可以约束泛型的类型
const foo = <T extends string>(value: T): T => value;
// ✅
const returnStr = foo<string>("foo");
// ❌ 类型“number”不满足约束“string”。
const returnNum = foo<number>(1);
泛型:可以这么理解其实就是类型参数形参。