TS泛型理解学习笔记
Posted 森森
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TS泛型理解学习笔记相关的知识,希望对你有一定的参考价值。
概念定义
泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性,使接口,函数或类更加通用
1.简单演示
function fn<T> (value: T) : T { return value };
const num: number = 11
const res1 = fn(num) --------返回 number类型
const str: string = \'11\'
const res1 = fn(str) --------返回 string类型
总结:
函数fn后面带的一个<T>括号,括号里面的T是占位符可以随意写的,如<A>或者<B>
传入参数也可不申明类型,TypeScript 的编译器会利用类型推论来确定参数的类型
函数定义的时候不申明参数和返回值类型,而是在函数调用的时候去确定类型
2.泛型类型
一个泛型函数的类型如下:
<泛型变量名称>(参数1: 泛型变量, 参数2: 泛型变量, ...参数n: 泛型变量) => 泛型变量
可以以对象字面量的形式来定义泛型函数(这更像是接口),如
let foo: `{ <T>(arg: T): void }`;
foo = function <T>(arg: T): void {
console.log(arg);
}
foo(11); // 11
将上面的例子中的 { <T>(arg: T): void }
改为接口,则有:
interface IGeneric {
<T>(arg: T): void
}
let foo: IGeneric = function <T>(arg: T): void {
console.log(arg)
}
foo(11); // 11
3.泛型约束
泛型可以通过 extends 一个接口来实现泛型约束,写法如:<泛型变量 extends 接口>,例子:
interface IArray {
length: number
}
function logIndex<T extends IArray>(arg: T): void {
for (let i = 0; i < arg.length; ++i) {
console.log(i)
}
}
let arr = [1, 2, 3,4]
logIndex<number>(arr) // 报错
logIndex<number[]>(arr) // 允许
logIndex(arr) // 自动类型推导,允许
以上是关于TS泛型理解学习笔记的主要内容,如果未能解决你的问题,请参考以下文章