如何解决TypeScript:重载函数时,“重载签名必须全部在环境或非环境中”
我正在尝试创建一个重载函数getDefaultPath
,以便它只能仅接受某些类型的组合。
我尝试使用函数签名声明,但是这两个函数声明都导致了令人困惑的错误消息:
过载签名必须全部是环境性的或非环境性的。
// type declartions
export enum TABS {
TAB_A,TAB_B
}
export interface TabAParams {
...
}
export interface TabBParams {
...
}
// Overload signatures
export declare function getDefaultPath(tab: TABS.TAB_A,pathParams: TabAParams): string;
export declare function getDefaultPath(tab: TABS.TAB_B,pathParams: TabBParams): string;
// this function is to be overloaded
export function getDefaultPath(
tab,pathParams
) {
switch (tab) {
case TABS.TAB_A:
return getTabAPath(pathParams); // only accepts TabAParams
case TABS.TAB_B:
return getTabBPath(pathParams); // only accepts TabBParams
default:
throw new UnreachableCaseError(tab);
}
}
// helps to avoid missing cases
export default class UnreachableCaseError extends Error {
constructor(val: never) {
super(`Unreachable case: ${val}`);
}
}
解决方法
只需从重载中删除declare
一词,错误就会消失。
还考虑到没有正确检查类型的实际实现,并且不能更改为检查类型,这是您尝试实现它的一种方式,同时考虑了TS当前所具有的功能。只需检查此功能的使用情况即可
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。