【问题标题】: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\' 的参数。
构造签名的类型不兼容。
这影响了使用Constructor 和AbstractConstructor 的每个文件。
我找到了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 中没有提到它,也不是由升级脚本本身管理的。