typescript linter 在尝试制作 polyfill 时触发错误
Posted
技术标签:
【中文标题】typescript linter 在尝试制作 polyfill 时触发错误【英文标题】:typescript linter triggers error when trying to make a polyfill 【发布时间】:2018-06-17 03:42:22 【问题描述】:我正在尝试为我的应用程序为不同的浏览器制作一些 polyfill, 我有一个导入其他文件的文件,当我导入它时打字稿失败。
如果我注释掉 - import "../scripts/polyfill_es5"
一切正常,
如果我包含它,脚本会失败并说 -
“对象”类型上不存在属性“assignDeep”
为什么我的导入会破坏代码?
这些是我的文件:
Polyfill.ts:
import "../scripts/polyfill_es5"
interface Object
assignDeep: (target: , ...sources: any[]) => object;
Object.prototype.assignDeep = (target: , ...sources: any[]) => // .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');
const to = Object(target);
let nextSource;
for (let index = 1; index < sources.length; index++)
nextSource = sources[index];
if (nextSource != null) // Skip over if undefined or null
for (const nextKey in nextSource)
// Avoid bugs when hasOwnProperty is shadowed
if (Object.prototype.hasOwnProperty.call(nextSource, nextKey))
if (typeof to[nextKey] === 'object'
&& to[nextKey]
&& typeof nextSource[nextKey] === 'object'
&& nextSource[nextKey])
to[nextKey] = Object.assignDeep(Array.isArray(to[nextKey]) ? [] : , to[nextKey], nextSource[nextKey]);
else
to[nextKey] = nextSource[nextKey];
return to;
;
polyfill_es5.ts:
interface NodeList
forEach : (callback : (currentValue : Node, currentIndex : number, listObj : NodeList) => void, thisArg : string|Window) => void;
if (typeof NodeList !== 'undefined' && !NodeList.prototype.forEach)
NodeList.prototype.forEach = (callback : (currentValue : Node, currentIndex : number, listObj : NodeList) => void, thisArg : string|Window) =>
thisArg = thisArg || window;
for (let i = 0; i < this.length; i++)
callback.call(thisArg, this[i], i, this);
;
【问题讨论】:
【参考方案1】:你需要做全局增强:
declare global
interface Object
assignDeep: (target: , ...sources: any[]) => object;
当文件包含***导入/导出语句时,TypeScript 编译器会将文件视为模块文件。所以你的interface Object
是文件本地的,而不是全局的Object
。
【讨论】:
非常感谢它的帮助以上是关于typescript linter 在尝试制作 polyfill 时触发错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 TypeScript 和 Maquette JSX 但 linter 说 'jsx' 未使用
对象可能是“null”——TypeScript linter 出错