Angular 角度9常春藤构建-扩展错误

Angular 角度9常春藤构建-扩展错误,angular,typescript,build,angular-ivy,Angular,Typescript,Build,Angular Ivy,早上好 我最近将一个v8项目更新为v9,它似乎工作得很好。然而,我有一些扩展,编译器抛出了一些关于它们的错误,这在我最近升级的另一个项目中是没有的 扩展是构造函数和proto的基本类型。它们设置得很好-在我的多个项目中使用相同的设置。至关重要的是,它们在其他升级项目中工作良好,没有任何错误 但是,要获得所有产品的基本使用确认: 将iface添加到typings.d.ts,例如 interface StringConstructor { isNullOrEmpty(str: string):

早上好

我最近将一个v8项目更新为v9,它似乎工作得很好。然而,我有一些扩展,编译器抛出了一些关于它们的错误,这在我最近升级的另一个项目中是没有的

扩展是构造函数和proto的基本类型。它们设置得很好-在我的多个项目中使用相同的设置。至关重要的是,它们在其他升级项目中工作良好,没有任何错误

但是,要获得所有产品的基本使用确认:

将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/ **
并且尝试浏览
中的结果无法获取/
基本消息。但是,它会在保存文件时执行通常的重新构建,其中会再次显示所有这些错误消息,但这次无论如何都会完成构建并正常工作

有没有人能给我指出我可能错过的方向?在这两个项目之间,我已经检查了
angular.json
tsconfig
s、
main.ts
等之间的任何重大变化。但到目前为止,我的答案是空的

谢谢

编辑:

恢复并再次尝试升级,扩展在更新指南的第一步就中断了,只需使用
ng update@angular运行轻微的更新/core@8@棱角/cli@8

从那次更新开始,它就消失了。 跳过这一步(反正我已经在运行一个v8应用程序)并试图直接升级到9,不幸的是,这也会扼杀它

更新:

理查德的回答似乎已经消除了所有的日期扩展错误信息。 它似乎一点也不喜欢
DateConstructor
接口的存在,而且在尝试他的方法时,它似乎对
moment
的使用也不是特别满意

更新编辑:


日期扩展看起来都和其他扩展完全一样,唯一的区别是其中有一行来自“时刻”的导入时刻。移除这些东西似乎没有什么不同;这就像
Date
s与
String
s或
Array
s是不同的野兽。

我不得不删除
export{}extensions.ts
)中选择code>,然后重复该接口

extensions.ts

interface String {
  format(...args: string[]): string;
  endsWith(searchString: string, position?: number): boolean;
}

if (!String.prototype.hasOwnProperty('format')) {
    String.prototype.format = function (...args: string[]): string {
        ...
    };
}

if (!String.prototype.hasOwnProperty('endsWith')) {
    String.prototype.endsWith = function (searchString, position) {
        ...
    };
}

另一个项目有错误,我似乎缩小了范围

我有类似于
的生成警告,只向tsconfig中的“文件”或“包含”属性添加入口点

在我正在更新的这个最新项目中查看并比较了我的
tsconfig.app.json
文件和另一个文件,再加上上面的警告,它非常突出

以前的配置:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "module": "es2015",
    "types": []
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}
新建配置,修复警告(添加文件main和polyfills),然后还修复扩展名:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": ["node"]
  },
  "files": [
    "main.ts",
    "polyfills.ts"
  ],
  "include": [
    "**/*.d.ts",
    "extensions/*.ts"
  ],
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}

似乎需要包含这样的文件

您必须专门将“
”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项目,并比较两个项目的配置文件以检查任何异常情况。。。似乎已经奏效了!非常感谢。我的字符串/数组/对象扩展不再出错,但它对我的
日期
扩展不满意。同样的修复方法似乎不适用于这些。有什么建议吗?不确定,你能用日期扩展名的代码片段更新吗?不太重要,它看起来和所有其他扩展名一模一样
Date.xxx=function…
对于构造函数扩展,
Date.prototype.xxx=function…
对于其余部分,与其他部分完全相同。我想我会接受这一失败,并将我的日期扩展改为静态方法或其他方法,除非有人碰巧弄明白。其他扩展都很好,至少,谢谢你,你可以得到你的答案:)嘿,很抱歉回复太晚了,我在我的解决方案中测试了一个日期扩展,它成功了,所以IDK。仔细检查错误,可能是不同的原因。谢谢你的勾选!