我有一个自定义类型声明文件,我想在其中重写一个已经存在的接口属性(不是创建一个新属性,而是修改现有属性)
我已经尝试了几种方法,如省略属性(如下所示),但都没有成功。
src/types/example.d.ts
----------
import package, { AnInterface } from 'example'
interface CustomInstance extends Omit<Instance, 'clients'> {
clients: string[];
}
declare module "example-module" {
export interface Instance extends CustomInstance {
test: number
clients: CustomType
}
}
src/main.ts
-----------
example.test // number as expected
example.clients // is always the type from node_modules, not my .d.ts file
如果我尝试添加clients
而不进行任何扩展,则会得到Subsequent property declarations must have the same type. Property 'clients' must be of type 'EDictionary', but here has type 'CustomType'
然而,如果我尝试扩展自定义示例(如上所述),我会得到错误Type 'Instance' recursively references itself as a base type.
(即使我是ts-ignore
,我的应用程序仍将使用node_modules中定义的类型)。
1条答案
按热度按时间3bygqnnd1#
你不能用d.ts来“取消定义",你只能更精确地定义它。
最好的删除方法是重新导出模块中的所有内容,更改其类型
在您的情况下,您可能不想取消
clients
的定义,而是想缩小它的范围,那么这将是