Angular 7+中是否有ClassDefinition的类似物?

时间:2019-04-26 11:29:14

标签: angular typescript

我正在将angular v4项目迁移到Angular7。我已经遇到了遗留代码,我无法摆脱它。它具有ClassDefinition接口,而新的Angular 7没有。 我该如何解决这个问题? 代码示例如下所示。

我试图在角度文档的变更日志中找到解决方案,但对我没有任何帮助。

import { ClassDefinition} from "@angular/core";

let componentDefinition: ClassDefinition = {
    constructor: MenuItem
};

1 个答案:

答案 0 :(得分:0)

如果您谈论此问题:https://v4.angular.io/api/core/ClassDefinition-第一种选择是只在您的模块中声明它:

/**
 * Declares the interface to be used with {@link Class}.
 *
 * @stable
 */
export type ClassDefinition = {
  /**
   * Optional argument for specifying the superclass.
   */
  extends?: Type<any>;

  /**
   * Required constructor function for a class.
   *
   * The function may be optionally wrapped in an `Array`, in which case additional parameter
   * annotations may be specified.
   * The number of arguments and the number of parameter annotations must match.
   *
   * See {@link Class} for example of usage.
   */
  constructor: Function | any[];
} &
{
  /**
   * Other methods on the class. Note that values should have type 'Function' but TS requires
   * all properties to have a narrower type than the index signature.
   */
  [x: string]: Type<any>|Function|any[];
};

此后,您需要根据代码库决定如何处理情况,但是您应该知道-API被标记为稳定,但随后被https://github.com/angular/angular/commit/cac130eff9b9cb608f2308ae40c42c9cd1850c4d#diff-635fe23be5795132e3385c8f4899dc3a

您可以看到-原因是:

  

此模式不   允许像Webpack这样的构建工具来处理和优化代码,从而   导致束过大。我们正在删除此API   因为我们正在努力确保每个人都走在快速道路上   默认,并且无法使用ES5进入快速路径   DSL。替代方法是使用TypeScript和@decorator格式。

因此,您应该重构遗留代码并最终使用TypeScript。