在 typescript 里用范型写一个函数,不知道该怎么实现,求大神指点!

339 天前
 hahaFck

假如想实现下面这个类似函数获取 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 ,感觉很麻烦。

550 次点击
所在节点    程序员
2 条回复
shenyu1996
339 天前
hahaFck
339 天前
@shenyu1996 大佬厉害,重载解决了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/943224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX