我想覆盖库声明中的属性类型,我尝试使用接口进行覆盖,但出现错误Subsequent property declarations must have the same type
。我应该如何解决此问题?
// this is library declaration
declare class Auth {
user: Record<string, string | number> | null
// i want to remove null type in user property, because i dont want to use `non-null assertion` in line 21
// i cant change this file because it is 3rd party library
}
// ------------------------------
// our file
// my override interface, but fail
interface Auth {
user: Record<string, string | number>
}
const a: Auth = {
user: {
name: 'joko',
age: 30
}
}
const userName = a.user!.name
// const userName = a.user.name // <-- i want use like this, because i'm sure that this property is always available
我尝试过用接口覆盖库声明,但是失败了。我预期的结果是,只使用我们的代码,就可以覆盖该类型,而无需触及或更改库。
2条答案
按热度按时间yrdbyhpb1#
嗨@巴加斯卡拉,
你为什么不这样做。
接口来扩展Auth类并重写用户属性的类型。
在你的档案里:-
如果要重写已在库中声明的变量,可以通过在代码中声明一个同名的新变量来实现。
注意这不是库文件.它是你的代码文件.
在你的代码文件里。
因此,将使用代码中声明的
const userName = a.user.name;
,而不是库中的const userName = a.user!.name;
。jjhzyzn02#
我自己已经解决了,在我的例子中,我想覆盖
nuxt-auth
模块上的Auth
接口,解决方案如下:1.将node_modules中的模块类型复制到我们的类型文件中。然后更改相应的接口(将
Auth
更改为IAuth
)。IAuth
是我们修改后的接口。1.在
tsconfig.json
中添加上面的paths
文件,这样typescript将使用该文件而不是原始模块类型。瞧,使用修改后的接口,该类型按预期运行