早上好!
我最近将一个 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
、tsconfig
s 、main.ts
等之间的任何重大变化,但到目前为止我还是一无所获。
谢谢。
编辑:
恢复并再次尝试升级,扩展在更新指南的第一步中断,只需使用ng update @angular/core@8 @angular/cli@8
.
从那个更新开始,它就死了。跳过这一步(无论如何我已经在运行一个 v8 应用程序)并尝试直接升级到 9,遗憾的是也杀死了它。
更新:
理查德的回答似乎已经摆脱了所有日期扩展错误消息。它似乎根本不喜欢接口的存在,而且在尝试他的方法时DateConstructor
,它似乎也对 的用法不是特别满意。moment
更新编辑:
日期扩展看起来与其他扩展完全一样,唯一的区别是那里有一条import moment from 'moment'
线。删除这些东西似乎没有什么区别。就像s 与s 或sDate
是不同的野兽...String
Array