【问题标题】:Angular Material upgrade from version 13 to 14 issue - error TS2307: Cannot find module '@angular/material/core/common-behaviors/constructor'Angular Material 从版本 13 升级到 14 问题 - 错误 TS2307:找不到模块 \'@angular/material/core/common-behaviors/constructor\'
【发布时间】:2022-09-27 15:14:23
【问题描述】:

在将 Angular 和 Angular Material 从版本 13.2.6 迁移到 14.2.2 期间,我遇到了以下问题:

错误 TS2307:找不到模块 \'@angular/material/core/common-behaviors/constructor\' 或其相应的类型声明。

错误 TS2345:类型为 \'typeof MatInputBase\' 的参数不可分配给类型为 \'_AbstractConstructor\' 的参数。 构造签名的类型不兼容。

这影响了使用ConstructorAbstractConstructor 的每个文件。

我找到了similar topic,但似乎只是错误消息相似,但没有任何建议对我有帮助。

    标签: angular typescript angular-material migration


    【解决方案1】:

    通常,错误消息非常清楚 - “找不到模块”表示模块不存在 :)

    为了确定这是否属实,我去了node_modules 文件夹然后@angular/material/core/ 只是为了确认那里没有common-behaviors 文件夹。然而,在核心模块内的index.t.ts 文件中,我可以找到以下声明:

    export declare type _Constructor<T> = new (...args: any[]) => T;
    
    export declare type _AbstractConstructor<T = object> = abstract new (...args: any[]) => T;
    

    这基本上意味着代码在重构期间被移出并且有些地方发生了变化。为了解决我的问题,我只需将导入更改为正确的路径,从:

    import { AbstractConstructor, Constructor } from '@angular/material/core/common-behaviors/constructor';
    

    至:

    import { _AbstractConstructor, _Constructor } from '@angular/material/core';
    

    显然代码需要稍微调整一下,因为现在这些类的名称前面带有_

    简单,但不明显,尤其是在Angular Migration guide 中没有提到它,也不是由升级脚本本身管理的。

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 2022-08-22
      • 2018-07-11
      • 2018-01-23
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多