我在我的应用程序中使用TypeScript,其中我使用函数:
Object.assign(this.success, success.json())
然而,在编译过程中,我收到了以下错误:
error TS2339: Property 'assign' does not exist on type 'ObjectConstructor'.
你知道我怎样才能摆脱这个错误吗?
这是由于您使用了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;
};
})();
}
可以使用类型断言,如下所示:
(<any>Object).assign(this.success, success.json())
您应该将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,或,但我只想要。但是我得到一个错误