【问题标题】:Using a JavaScript Package with TypeScript Typings in Angular在 Angular 中使用带有 TypeScript 类型的 JavaScript 包
【发布时间】:2020-08-08 22:39:45
【问题描述】:

我正在尝试在使用 Angular 9 实现的 SPA 中使用 Twitter Lite 库 (https://www.npmjs.com/package/twitter-lite)。Twitter Lite 是一个 JavaScript 库,其中包含用于支持 TypeScript 的类型。

根据打字(https://github.com/draftbit/twitter-lite/blob/master/index.d.ts)中给出的示例,我将主类导入其中一个组件(我们称之为 TwitterComponent):

import { Twitter } from 'twitter-lite';

然后在组件中使用类:

const twitter = new Twitter({
    consumer_key: 'XYZ',
    consumer_secret: 'XYZ',
    access_token_key: 'XYZ',
    access_token_secret: 'XYZ'
});

代码编译良好,但导航到 TwitterComponent 所属模块下的任何组件都会导致此错误:

未捕获(承诺):ReferenceError:未定义全局

在支持 TS 的情况下,使用这样的 JS 库的正确方法是什么?模块应该导入一些东西吗?还是这个错误更可能与 Twitter Lite 本身的实现方式有关?

如果您建议像这样导入库:

import * as Twitter from 'twitter-lite';

它为启动类的代码给出了这个编译时错误:

这个表达式是不可构造的。类型“typeof TwitterLite”没有构造签名。

这本身就很奇怪,因为该类确实定义了构造函数。

【问题讨论】:

  • 这是因为命名空间被导出而不是类。
  • 我可以编辑类型以自己导出课程吗?
  • 我不认为浪费时间编辑这个文件是个好主意。您是否尝试将软件包更新到最新版本(v0.10.1-0)?它包括您的问题的解决方案。
  • 那是我已经在使用的版本。从未使用过以前的版本

标签: angular typescript


【解决方案1】:

您从该库中使用的版本存在问题。这是一个已知问题,解决方案即将到来。同时根据thread on Github,您应该对您的代码应用以下更改:

import Twitter = require('twitter-lite');

【讨论】:

  • 感谢您在 Github 上指出该线程。我尝试了您的建议以及该线程上的其他建议(自您的回答以来它已经取得了进展),包括“const Twitter = require('twitter-lite')”。仍然遇到同样的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 2019-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多