1

早上好!

我最近将一个 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.jsontsconfigs 、main.ts等之间的任何重大变化,但到目前为止我还是一无所获。

谢谢。

编辑:

恢复并再次尝试升级,扩展在更新指南的第一步中断,只需使用ng update @angular/core@8 @angular/cli@8.

从那个更新开始,它就死了。跳过这一步(无论如何我已经在运行一个 v8 应用程序)并尝试直接升级到 9,遗憾的是也杀死了它。

更新:

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

更新编辑:

日期扩展看起来与其他扩展完全一样,唯一的区别是那里有一条import moment from 'moment'线。删除这些东西似乎没有什么区别。就像s 与s 或sDate是不同的野兽...StringArray

4

2 回答 2

1

我不得不export {};从我的实现文件(extensions.ts)中删除并重复界面。

扩展名.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) {
        ...
    };
}
于 2020-02-27T16:16:32.457 回答
0

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

我构建了类似于Add only entry points to the 'files' or 'include' properties in your 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"
  ]
}

似乎需要包含这样的文件!

于 2021-04-09T07:27:54.527 回答