Typescript 如何使用环境声明使类型更严格?

Typescript 如何使用环境声明使类型更严格?,typescript,types,Typescript,Types,假设我使用的包具有以下类型的文件: lib.foobar.d.ts declare function foobar(foo: string): void; declare function foobar(foo: 'bar'): void; declare foobar(foo: 'bar'): void; declare foobar(foo: string): never; 现在假设lib.foobar.d.ts是为早期版本的Typescript编写的,该版本不支持文字类型。实际上,f

假设我使用的包具有以下类型的文件:

lib.foobar.d.ts

declare function foobar(foo: string): void;
declare function foobar(foo: 'bar'): void;
declare foobar(foo: 'bar'): void;
declare foobar(foo: string): never;
现在假设
lib.foobar.d.ts
是为早期版本的Typescript编写的,该版本不支持文字类型。实际上,
foobar
函数实际上要求
foo
参数完全是
'bar'
,而不是其他字符串。我可以为此编写环境声明:

ext.foobar.d.ts

declare function foobar(foo: string): void;
declare function foobar(foo: 'bar'): void;
declare foobar(foo: 'bar'): void;
declare foobar(foo: string): never;
Typescript现在知道
foobar(foo:bar')
foobar
函数的有效重载,但它只是一个重载,
foobar(foo:string)
版本仍然是合法的。因此,如果我写
foobar('baz')
,我不会得到任何错误,但我希望这是一个错误,因为它必须是
foobar('bar')

是否有任何方法可以在不编辑
lib.foobar.d.ts
的情况下删除或更正原始
foobar
声明的情况下执行此操作

我能做到的最接近的是:

ext.foobar.d.ts

declare function foobar(foo: string): void;
declare function foobar(foo: 'bar'): void;
declare foobar(foo: 'bar'): void;
declare foobar(foo: string): never;
这导致
foobar('baz')
行之后的行有时被标记为无法访问的代码。显然,如果
foobar('baz')
是块中的最后一行,则不会有任何其他行无法访问。有时似乎只是出于某种原因?我觉得还不够好

(在我的实际用例中,我想要更新的函数在
lib.dom.d.ts
中,我想要使用的更严格的类型是项目的“品牌原语”,比如
Pixels
或其他什么,所以像“向
foobar
提交拉取请求修复声明”这样的东西是行不通的。)