【发布时间】:2020-06-07 18:19:48
【问题描述】:
早上好!
我最近将一个 v8 项目更新到 v9,它似乎工作正常。但是,我有一些扩展,编译器会抛出一些关于它们的错误,而在我最近升级的另一个项目中却没有。
对于构造函数和原型,扩展都是基本类型。它们的设置很好 - 我拥有它们的多个项目中都可以使用相同的设置。至关重要的是,它们在其他升级的项目中运行良好,没有任何错误。
但是,要获得基本的使用确认:
将 iface 添加到typings.d.ts,例如
interface StringConstructor {
isNullOrEmpty(str: string): boolean;
}
interface String {
padStartWithChar(char: string, totalSize: number): string;
}
实现,例如
export {};
String.isNullOrEmpty = function(str: string): boolean {
// ...
};
String.prototype.padStartWithChar = function(this: string, char: string, totalSize: number): string {
// ...
}
并导入main.ts
// ...
import './extensions/string-extensions';
// ...
我的路径没有改变,它们都指向所有正确位置的所有正确文件,我可以考虑检查它们(src/typings.d.ts 在我放置它的 src 中,tsconfig.app.ts 包含它以前做过,等等等等)。
这会导致构建错误;对于扩展的所有用法,我都会收到垃圾邮件,并且构建最终会停止:
...
src/extensions/string-extensions.ts:9:8 - error TS2339: Property 'isNullOrEmpty' does not exist on type 'StringConstructor'.
9 String.isNullOrEmpty = function(str: string): boolean {
...
** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
并尝试在Cannot GET/ 基本消息中浏览结果。但是,它会在保存文件时进行通常的重新构建,其中会再次显示所有这些错误消息,但这次无论如何都会完成构建并且可以正常工作。
有没有人可以指出我可能错过的方向?在这两个项目之间,我检查了angular.json、tsconfigs、main.ts 等之间的任何重大变化,但到目前为止我还是一无所获。
谢谢。
编辑:
恢复并再次尝试升级,扩展程序在更新指南的第一步中断,只需使用 ng update @angular/core@8 @angular/cli@8 运行轻微更新。
从那次更新开始,它就死了。 跳过这一步(反正我已经在运行一个 v8 应用程序)并尝试直接升级到 9,可悲的是也杀死了它。
更新:
理查德的回答似乎已经摆脱了所有日期扩展错误消息。
在尝试他的方法时,它似乎根本不喜欢DateConstructor 接口的存在,并且对于moment 的使用似乎也不是特别高兴。
更新编辑:
日期扩展看起来与其他扩展完全一样,唯一的区别是那里有一个import moment from 'moment' 行。删除这些东西似乎没有什么区别。就像 Dates 与 Strings 或 Arrays 不同的野兽......
【问题讨论】:
-
您必须将
"include": [ "src/**/*.d.ts" ]独占添加到您的 tsconfig.app.json -
@KathakDabhi - 感谢您的回复。是的,已经在里面了,不是那样的。
-
typings.d.ts文件的 parh 是什么,确保它在 src 目录中。 -
在
src/typings.d.ts,和我升级前一样。 -
@Kremon,只有当我删除了 typings.d.ts 时,我才能生成相同的错误,否则它可以在 Angular 9 项目中正常工作。但是您可以创建新的 Angular 9 项目并比较两个项目的配置文件以检查是否有异常。
标签: angular typescript build angular-ivy