当前位置: 首页 > 知识库问答 >
问题:

类型“ObjectConstructor”上不存在属性“assign”

孙玺
2023-03-14

我在我的应用程序中使用TypeScript,其中我使用函数:

Object.assign(this.success, success.json())

然而,在编译过程中,我收到了以下错误:

 error TS2339: Property 'assign' does not exist on type 'ObjectConstructor'.

你知道我怎样才能摆脱这个错误吗?

共有3个答案

漆雕亮
2023-03-14

这是由于您使用了ECMAScript 6功能并以ECMAScript 5或3为目标造成的。最简单的修复方法是设置正确的目标,例如,如果您正在使用Grunt:

options: {
    target: 'es6'
}

更改Visual Studio中的相关属性选项卡,或通过编辑。csproj文件,并找到TypeScriptTarget元素并更改为ES6,例如:

<TypeScriptTarget>ES6</TypeScriptTarget>

如果您需要以ES5为目标,那么只需在您的TypeScript代码中添加以下内容

declare interface ObjectConstructor {
    assign(target: any, ...sources: any[]): any;
}

这将额外的方法融入其中,解决问题。这里有更多细节。不过,您可能需要polyfill,具体取决于您的浏览器兼容性要求——例如,来自MDN的这一款:

if (typeof Object.assign != 'function') {
  (function () {
    Object.assign = function (target) {
      'use strict';
      if (target === undefined || target === null) {
        throw new TypeError('Cannot convert undefined or null to object');
      }

      var output = Object(target);
      for (var index = 1; index < arguments.length; index++) {
        var source = arguments[index];
        if (source !== undefined && source !== null) {
          for (var nextKey in source) {
            if (source.hasOwnProperty(nextKey)) {
              output[nextKey] = source[nextKey];
            }
          }
        }
      }
      return output;
    };
  })();
}
和弘博
2023-03-14

可以使用类型断言,如下所示:

(<any>Object).assign(this.success, success.json())
东方华晖
2023-03-14

您应该将lib属性添加到tsconfig中。json,然后编辑器将使用捆绑的typescript类型定义,并为您提供intellisense。

只需将“lib”:[“esnext”,“dom”]添加到tsconfig。json并重新启动VS代码

{
    "compilerOptions": {
        // ...
        "target": "es5",
        "lib": ["esnext", "dom"]
        // ...
    }
}

请参阅所有tsconfig。json选项。

<TypeScriptLib>esnext, dom</TypeScriptLib>

请参见此处的所有MSBuild typescript编译器选项和用法。

如果您已将项目配置为使用内置类型并重新启动编辑器,那么当您使用对象时,生成的类型将如下所示,而不是类型为any。分配

请注意,如果您正在传输到ES5或更低版本,并且目标是IE11,则需要包含polyfills,因为typescript编译器不会为您包含polyfills。

如果你想加入polyfills(你应该这么做),那么我建议你使用core js的polyfills。

npm install --save core-js

yarn add core-js

然后在应用程序的入口点(例如/src/index.ts)中,在文件顶部添加核心js的导入:

import 'core-js';

如果您没有使用软件包管理器,那么您可以在使用对象之前运行的代码中的某个位置粘贴以下取自MDN的polyfill。分配

if (typeof Object.assign != 'function') {
  // Must be writable: true, enumerable: false, configurable: true
  Object.defineProperty(Object, "assign", {
    value: function assign(target, varArgs) { // .length of function is 2
      'use strict';
      if (target == null) { // TypeError if undefined or null
        throw new TypeError('Cannot convert undefined or null to object');
      }

      var to = Object(target);

      for (var index = 1; index < arguments.length; index++) {
        var nextSource = arguments[index];

        if (nextSource != null) { // Skip over if undefined or null
          for (var nextKey in nextSource) {
            // Avoid bugs when hasOwnProperty is shadowed
            if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
              to[nextKey] = nextSource[nextKey];
            }
          }
        }
      }
      return to;
    },
    writable: true,
    configurable: true
  });
}

 类似资料:
  • 我使用的是完全修补过的Visual Studio 2013。我正在尝试使用JQuery、JQueryUI和JSRender。我也在尝试使用打字。在ts文件中,我得到如下错误: 类型“{}”上不存在属性“fade div”。

  • 我试图在登录过程后获得连接的用户模型, 首先,在CanActivate guard检查了带有用户JSON对象的本地存储并发现该对象为空之后,用户将重定向到“/login”URL 然后用户登录并重定向回根URL“/”,在连接过程中我使用AuthService,它将从服务器返回的用户对象保存在用户模型中 这是我的守卫:

  • 升级到Angular 6.0和Rxjs到6.0后,我收到以下编译错误:

  • 获取错误:(类型窗口中不存在属性“MktoForms2”

  • 我试图在TypeScript中使用“时刻-持续时间格式”,但即使它有效,webpack仍不断抱怨它无法在线找到“格式”方法: 这里是package.json tsconfig.json: 在(angular2)组件中: 我也试过了 但这并不能改变什么: [at-loader]./src/app/组件/建筑/商店/shop.component.ts:190中的错误:81 TS2339:属性“格式”在

  • 嗨,我正在使用Angular 2 final和router 3.0。我想过滤从 我想做的是: 可以是instanceOf,或,但我只想要。但是我得到一个错误