【问题标题】:Import nodejs module with version number into typescript将带有版本号的nodejs模块导入打字稿
【发布时间】:2018-09-25 21:10:48
【问题描述】:

所以我有一个似乎使用版本控制系统的节点模块。使用 nodejs 我只是使用了

const Package = require('package-name').V1;

没有问题。但是 Typescript 不喜欢 .V1 所以我使用

import { Package } from 'package-name';

这很好,但打字稿输出到 javascript 是

const package_name_1 = require("package-name");

这意味着package_name_1 的任何函数或属性都未定义,因为模块似乎没有加载V1.js 文件(我假设它是这样工作的......)

所以我尝试了

import * as Package from 'package-name';

但它输出的 javascript 和以前一样..

我使用的包的实际文件夹结构是

-node_modules
--package-name
---client
----v1
----v1.js

v1.js 文件看起来像

var PackageV1 = {}

PackageV1.CONSTANTS = require('./v1/constants');
PackageV1.Request = require('./v1/request');
PackageV1.Session = require('./v1/session');
...

module.exports = PackageV1;

当然是这样的

const Package = require('package-name.V1');

不工作

错误:找不到模块'package-name.V1'

我怎样才能使用打字稿方法要求这个V1.js文件/目录?

【问题讨论】:

  • 你具体说的是什么包?我希望import { Package } from 'package-name'; 中的Package 有一个名为V1 的属性,您可以使用它来访问模块成员,但我不知道这些类型是如何编写的
  • 当然import { V1 } from 'package-name'; 甚至import { V1 as Package } from 'package-name'; 取决于您自己的喜好。顺便说一句,以前没有什么能阻止你使用类似的 const { V1: Package } = require('package-name');,因为 import 构造使用一种“解构”形式,这种形式通常在现代 JavaScript 环境中可用。

标签: javascript node.js typescript import


【解决方案1】:

正如 cmets 中所暗示的那样

import * as Package from 'package-name';

很好,但是在使用包时我不得不使用

Package.V1.Request()

而不是

Package.Request()

【讨论】:

  • 可以使用package-name/v1吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2017-10-29
  • 2021-08-31
  • 2021-05-15
  • 2020-12-06
  • 2022-01-14
相关资源
最近更新 更多