泛型典型示例

函数输入值类型和输出值类型,映射关系

1
2
3
f('1') === 1

f(1) === '1'

即函数f

  1. 接收string类型时,返回number类型
  2. 接收number类型时,返回string类型

方法一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function f<T extends number | string>(
p: T
): T extends number ? string : T extends string ? number : null;

function f(p) {
let result = null;
if (typeof p === "string") {
// 经过一段逻辑处理,返回了number类型
result = Number(p);
}
if (typeof p === "number") {
// 经过一段逻辑处理,返回了string类型
result = String(p);
}
return result;
}

const res1 = f("1");
if (res1 === 1) {
}

if (res1 === "1") {
}

const res2 = f(2);
if (res2 === "2") {
}
if (res2 === 2) {
}

查看类型提示示意图

方法二

1
2
3
4
// 函数重载
function f(p:string):number;
function f(p:number):string;
function f(p:any):any;