我有一个外部模块(从@types/some-module
安装)。我想在该模块的命名空间内扩展一个接口,以使该接口上的属性之一比该模块提供的属性更窄。
// original.d.ts
namespace SomeNamespace {
interface SomeInterface {
id: string;
}
}
// my.d.ts
declare module 'some-module' {
namespace SomeNamespace {
interface SomeInterface {
id: 'foo' | 'bar'; // what I want to do
}
}
}
我可以预见的是一个错误
Subsequent property declarations must have the same type. Property 'id' must be of type 'string', but here has type '"foo" | "bar"'. ts(2717)
有可能吗?我尝试添加unknown
甚至any
,但它不接受。
答案 0 :(得分:0)
模块扩充允许您添加到接口,但不能更改现有成员类型。您唯一的选择是扩展接口,并在适当的情况下将类型声明用于您的派生接口。
答案 1 :(得分:0)
不幸的是,'foo'|'bar'不是字符串类型,联合类型的工作方式更像打字稿中的枚举。
最好的想法是将id限制为'foo'|'bar'的工厂方法。
不幸的是,我没有想法来帮助您自动完成这些值。