如何在 Typescript 中获取没有模块或库的对象键?

How to get object keys without modules or libraries in Typescript?

如何用 "noLib": trueObject.getOwnPropertyNames(myObj);Object.keys(myObj);for (k in myObj) 之类的事情?

我在使用 for (k in value) 时遇到 Property 'getOwnPropertyNames' does not exist on type 'ObjectConstructor'.error TS2318: Cannot find global type 'Extract'. 之类的错误。

我正在尝试使用 Types for Adobe library 使用打字稿为 Adob​​e Illustrator 构建脚本,并且由于 Adob​​e 的扩展脚本不具备常见 JS 的所有功能,库的作者建议使用 "module": "none","noLib": truetsconfig.json

有什么想法可以实现吗?

在任何想要使用现代 JS 构造的 ExtendScript 项目中,您将需要大量的 polyfill。 (把它想象成针对 IE8。)Babel is sure to be part of that approach; there's also a Babel preset for ExtendScript。在这种安排中,TypeScript 将提供给 Babel,而 Babel 将生成实际的 ExtendScript。

至于您正在使用的库,他们推荐 "noLib": true 因为他们的类型重新声明了所有 JS 原语,并且 ExtendScript 本身支持的接口有限。如果你要使用 Babel,你应该让 TypeScript 以更现代的 JS 为目标,让 Babel 处理其他细节。这意味着删除 "noLib" 并将 "target" 设置为类似 "ES2015" 的内容。我不确定这将如何与捆绑到 Types-for-Adobe 中的原始类型交互;你可能需要做一些花哨的事情来绕过它们。

(编辑评论:现在是 2021 年,真正的答案应该是让 Adob​​e 将 ExtendScript 提升到至少 2011 年的标准...)