假如想实现下面这个类似函数获取 row 对象, 原始函数为:
function getRow(rowIndex: number): Row | null {
let row: Row | null = findRow(rowIndex);
return row;
}
改进版想增加一个可选参数 create ,在找不到 row 的时候就创建一个新的 row 并返回,这样函数的返回值就有两种情况:1. Row, 2. Row | null ,该怎么定义函数能让编译器自动推导出函数的返回值呢?
自己写的一个,编译不通过
function getRow<T>(rowIndex: number, create?: T): T extends true ? Row : Row | null {
let row: Row | null = findRow(rowIndex); //查找 row
if (row == null && create) {
row = {};
return row;
} else {
return row;
}
}
想要实现的目的是:传 create 参数时候,编译器应该能够推导出函数返回值是 row ,而不是 row|null ,这个函数应该怎么实现呢? 否则明明穿了 create 的参数时候,每次调用函数还要判断是否是 null ,感觉很麻烦。
1
shenyu1996 2023-05-26 16:38:09 +08:00
|
2
hahaFck OP @shenyu1996 大佬厉害,重载解决了
|