【发布时间】:2020-04-28 02:40:54
【问题描述】:
我有两个模块:
在一个模块中我引用了另一个模块run的函数:
@myorg/server
import { Client } from '.'
import { Middleware } from '@myorg/middleware'
let client = new Client()
Middleware.run(client)
然后在另一个模块中我只引用这样的类型:
@myorg/middleware
// References a '.d.ts' file
import { Client } from '@myorg/server'
export class Middleware {
public run(client: Client){
// Do some stuff
}
}
当我进行此设置时,Middleware.run(client) 给了我以下错误:
'import("/framework/server/src/Client").Client' 类型的参数不能分配给 'import("/framework/server/types/Client").Client' 类型的参数。
正如错误指出的那样,src(实际代码)和types(.d.ts 文件)不兼容。这是什么原因造成的,我该如何解决?
【问题讨论】:
-
我猜那是因为你正在导入一个类型,同时对于编译器来说,就像你正在导入一个模块一样。因此,您应该考虑其他包含类型的方法。您可以在
tsconfig.json中使用types来声明您的类型。 -
如果我在那里使用它们,我还需要
import {abc} from 'module-name'吗? -
通常你不会。如果你没有成功,你也可以试试这个typescriptlang.org/docs/handbook/triple-slash-directives.html。但是,在
tsconfig.json中声明的选项应该对您有用,并且可以让您声明一些包含所有第三方类型文件的文件夹。 -
如果我删除
import { Client } from '@myorg/server'的导入并将其添加到tsconfig.json => "types": ["@myorg/server"]我收到错误 找不到名称“客户”。我也不想使用三斜杠指令 -
如果
server是server.d.ts文件,请尝试使用@myorg。此外,如果 TypeScript 手表正在运行,请不要忘记重新启动它。在types中通常会声明一个文件夹
标签: javascript typescript