【问题标题】:ReSharper: Typescript error Return types are not relatableReSharper:Typescript 错误返回类型不相关
【发布时间】:2018-07-05 13:00:13
【问题描述】:

我明白了 返回类型不相关

重载签名与函数定义不兼容:返回 类型不相关

ReSharper 插件在此错误

public getCache<T>(key: string): T;
public getCache<T>(key: string, defaultValue: T): T;
public getCache<T>(key: string, defaultValue?: T): T
{
    const result = localStorage.getItem(key);
    return result ? JSON.parse(result) as T : defaultValue;
}

TypeScript 代码。

我明白为什么了。第一次重载中的泛型参数 T 与第二次重载中的 T 没有任何共同之处。我可以写

public getCache<T1>(key: string): T1;
public getCache<T2>(key: string, defaultValue: T2): T2;
public getCache<T>(key: string, defaultValue?: T): T
{
    const result = localStorage.getItem(key);
    return result ? JSON.parse(result) as T : defaultValue;
}

这个问题有解决办法吗?
我的 ReSharper 版本是 2017.3 (15.5.27130.2024)

【问题讨论】:

    标签: typescript resharper


    【解决方案1】:

    由于 TypeScript 具有可选参数,因此在这种情况下,重载没有意义。只需使用最后一个签名,这是最通用的一个,并涵盖其他情况:

    public getCache<T>(key: string, defaultValue?: T): T
    {
        const result = localStorage.getItem(key);
        return result ? JSON.parse(result) as T : defaultValue;
    }
    

    https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html(使用可选参数)

    【讨论】:

    • 有趣。我可以按照指南进行操作,但是如果我有不同输入参数的方法怎么办。我仍然需要修复这个错误。
    • 好吧,如果泛型类型不相关,则无法解决此问题。您可以将方法放在一个类中,然后将泛型类型放在该类中,这样所有方法都相同,或者干脆不使用重载。
    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多