Javascript 类型的参数不能分配给类型的参数(它们是相同的)

Javascript 类型的参数不能分配给类型的参数(它们是相同的),javascript,typescript,types,Javascript,Typescript,Types,这对我来说毫无意义: 类型为“(string |(new()=>Middleware)| Middleware)[]”的参数不能分配给类型为“(string | Middleware |(new()=>Middleware)[]”的参数 这两件事是一样的,对吗?我看到的唯一区别是项目的顺序。然而,typescript正在改变我定义它们的顺序,所以我假设顺序不是问题 我认为问题是因为我使用的两个包相互引用,它不知道如何正确解决问题 @red5/server->Middleware.ts impor

这对我来说毫无意义:

类型为“(string |(new()=>Middleware)| Middleware)[]”的参数不能分配给类型为“(string | Middleware |(new()=>Middleware)[]”的参数

这两件事是一样的,对吗?我看到的唯一区别是项目的顺序。然而,typescript正在改变我定义它们的顺序,所以我假设顺序不是问题

我认为问题是因为我使用的两个包相互引用,它不知道如何正确解决问题

@red5/server->Middleware.ts

import { Client } from '.'
import { Route } from '@red5/router'

export interface Middleware { }

public static async run(theRoute: Route, client: Client): Promise<boolean | Response> {
  let middleware = theRoute.routeOptions.middleware
  this._runPreMiddleware(middleware, client)
}

private static async _runPreMiddleware(middleware: ((new () => Middleware) | Middleware | string)[], client: Client): Promise<boolean | Response> {

}
import { Middleware } from '@red5/server'

export interface RouterOptions {
  middleware?: ((new () => Middleware) | Middleware | string)[]
  name?: string
}

export class Route {
  public routeOptions: RouterOptions = {}
}
这是一个更大版本的错误,我从这个错误中得到的启示是,它将源代码与定义文件进行比较,以解析类型

Argument of type '(string | (new () => Middleware) | Middleware)[]' is not assignable to parameter of type '(string | Middleware | (new () => Middleware))[]'.
  Type 'string | (new () => Middleware) | Middleware' is not assignable to type 'string | Middleware | (new () => Middleware)'.
    Type 'new () => Middleware' is not assignable to type 'string | Middleware | (new () => Middleware)'.
      Type 'new () => import("C:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/types/Middleware").Middleware' is not assignable to type 'new () => import("c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Middleware").Middleware'.
        Type 'import("C:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/types/Middleware").Middleware' is not assignable to type 'import("c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Middleware").Middleware'.
          Types of property 'handle' are incompatible.
            Type '((client: import("C:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/types/Client").Client, ...args: any[]) => boolean | import("C:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/types/Response").Response | Promise<...>) | undefined' is not assignable to type '((client: import("c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Client").Client, ...args: any[]) => boolean | import("c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Response").Response | Promise<...>) | undefined'.
              Type '(client: import("C:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/types/Client").Client, ...args: any[]) => boolean | import("C:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/types/Response").Response | Promise<...>' is not assignable to type '(client: import("c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Client").Client, ...args: any[]) => boolean | import("c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Response").Response | Promise<...>'.
                Types of parameters 'client' and 'client' are incompatible.
                  Type 'import("c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Client").Client' is not assignable to type 'import("C:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/types/Client").Client'.
                    Types have separate declarations of a private property '_post'.ts(2345)
“'string |(new()=>Middleware)| Middleware)[]”类型的
参数不能分配给“'string | Middleware |(new()=>Middleware)[]”类型的参数。
类型“string |(new()=>Middleware)| Middleware”不可分配给类型“string | Middleware |(new()=>Middleware)”。
类型“new()=>Middleware”不可分配给类型“string | Middleware |(new()=>Middleware)”。
输入'new()=>import(“C:/Users/rnady/Documents/vscode/projects/red5/framework/server/types/Middleware”)。中间件'不可分配给输入'new()=>import(“C:/Users/rnady/Documents/vscode/projects/red5/framework/server/src/Middleware”)。中间件'。
类型“导入”(“C:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/types/Middleware”)。中间件“不可分配给类型“导入”(“C:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Middleware”)。中间件”。
属性“句柄”的类型不兼容。
类型“((客户端:导入(“C:/Users/rnady/Documents/vscode/projects/red5/framework/server/types/client”)。客户端,…args:any[])=>boolean |导入(“C:/Users/rnady/Documents/vscode/projects/red5/framework/server/types/Response”)。响应|承诺)|未定义的”不能分配给类型“((客户端:导入(“c:/Users/rnady/Documents/vscode/projects/red5/framework/server/src/Client”).Client,…args:any[])=>boolean |导入(“c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Response”).Response |承诺|未定义”。
Type'(客户端:导入(“C:/Users/rnady/Documents/vscode/projects/red5/framework/server/types/client”)。客户端,…args:any[])=>boolean |导入(“C:/Users/rnady/Documents/vscode/projects/red5/framework/server/types/Response”)。响应|承诺'不可分配给Type'(客户端:导入(“c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Client”).Client,…args:any[])=>boolean |导入(“c:/Users/rnaddy/Documents/vscode/projects/red5/framework/server/src/Response”).Response |承诺”。
参数“client”和“client”的类型不兼容。
类型“导入”(“c:/Users/rnady/Documents/vscode/projects/red5/framework/server/src/Client”)。客户端“不可分配给类型“导入”(“c:/Users/rnady/Documents/vscode/projects/red5/framework/server/types/Client”)。客户端”。
类型具有私有属性“_post”.ts(2345)的单独声明

实际错误似乎是
类型的参数“client”和“client”不兼容。
因为一个版本来自
server/Types/client
,另一个版本来自
server/src/client
,这两种类型似乎不兼容(
类型有单独的私有属性声明“\u post”
)@p、 s.w.g我添加了一些显示与param 1相关的错误的图像,但正如您所说的,错误显示它与param 2相关…另一个奇怪的是,在编译时我没有收到任何错误。嗯…将
import{Client}从“.”更改为
import{Client}从“@red5/server”
似乎可以消除错误。如果不是在编译时,您什么时候会看到错误?实际错误似乎是
类型的参数“client”和“client”不兼容。
因为一个版本来自
server/Types/client
,另一个版本来自
server/src/client
,而这两个版本类型似乎不兼容(
类型有单独的私有属性声明“\u post”
)@p.s.w.g我添加了一些显示与param 1相关的错误的图像,但正如您所说的,错误显示它与param 2相关…另一个奇怪的是,在编译时我没有收到错误。嗯…更改
导入{Client}从“.”
到从“@red5/server”导入{Client}
似乎可以消除错误。如果不是在编译时,您什么时候会看到错误?