【问题标题】:Argument of type import().Client is not assignable to parameter of type import().Clientimport().Client 类型的参数不可分配给 import().Client 类型的参数
【发布时间】: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"] 我收到错误 找不到名称“客户”。我也不想使用三斜杠指令
  • 如果serverserver.d.ts 文件,请尝试使用@myorg。此外,如果 TypeScript 手表正在运行,请不要忘记重新启动它。在types 中通常会声明一个文件夹

标签: javascript typescript


【解决方案1】:

您还应该从@myorg/server 导入它的同一源文件中导入@myorg/middleware 中的类型Client

说明:在@myorg/middleware 中,您正在从类型声明文件 (.d.ts) 中导入类型 Client,我假设您已经使用 /// 指令在文件顶部引用了它。而在@myorg/server 中,Client 类型是直接从实际源代码导入的。因此 Typescript 不认为这两个是相同的,这就是你得到这个错误的原因。

【讨论】:

  • 如果我使用相同类型导入 @myorg/server 只是导入自身:@myorg/server
  • Hmmm.... 看起来这行得通...我不认为将模块引用到自身会工作...
  • 如果你给我你正在使用的真实代码,我可以进一步帮助你。
  • MiddlewareServer 我相信你的建议现在正在奏效......
  • 我查看了代码,是的,这是正确的解决方案。您在两个模块中导入了完全相同的类型,因此它可以正常工作
【解决方案2】:

我有一个非常相似的问题,除了在我的情况下,导入完全相同,除了文件名大小写不同。

file1.ts

import { Hub } from './hubs';

file2.ts

import { Hub } from './Hubs';

注意 ./Hubs./hubs 的大小写。它们不同导致错误:

ERROR in app/file1.ts:107:45 - error TS2345: Argument of type 'import("MY_PATH/app/Hubs").Hub' is not assignable to parameter of type 'import("MY_PATH/app/hubs").Hub'.

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 2019-06-24
    • 2021-06-14
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多