【问题标题】:How to use external .d.ts for a module如何为模块使用外部 .d.ts
【发布时间】:2017-04-14 00:57:42
【问题描述】:

我正在尝试了解如何使用模块未提供的外部 .d.ts?

我正在尝试使用没有类型定义的xlsx 并用@types/xlsx 包装它。

npm installed 他们两个,并认为我应该添加对typings/index.d.ts 的引用,如下所示:/// <reference path="../node_modules/@types/xlsx/index.d.ts" />

现在我很难理解在尝试使用 xlsx 和提供的类型定义时需要导入什么?

也许我只是弄错了,有一个更简单的方法。

【问题讨论】:

  • import xlsx = require("../node_modules/@types/xlsx/index");
  • @Ramakant 我认为 import = require 是针对没有 dts 的模块完成的,你说我应该在 dts 本身上这样做吗?这个导入的star怎么连接到xlsx的js源码呢?

标签: node.js typescript typescript-typings typing


【解决方案1】:

一般来说,现在您不需要手动添加 /// <reference... 引用。如果你已经使用 NPM 安装了类型定义,那么它们应该会自动包含在你的编译过程中。

您需要做的就是导入模块并开始使用它。例如,在一个新的空测试项目中,我刚刚安装了 xlsx (npm install xlsx @types/xlsx),现在可以成功编译并运行以下代码:

import xlsx = require("xlsx");
var workbook = xlsx.readFile("test.xlsx");

这应该就是你所需要的。

【讨论】:

  • 感谢您的回答蒂姆,也许当我第一次遇到import XX = require('XXX') 时我理解错了,但是当我没有 d.ts 时,它不适合我想要导入的模块吗? xlsx 不会被输入吗?我如何使用外部 d.ts 实现 import {IWorkBook} from 'xlsx' 的行为?我希望能够定义let workbook: IWorkBook = xlsx.readFile('test.xlsx');
  • 不,它实际上是非 ES6 模块导入的正确语法,在这种情况下是首选。见stackoverflow.com/a/29598404/68051。您可能会想到var XX = require('XXX'),它不包含类型。对于上面的例子,xlsx 实际上在这里输入正确;如果您尝试使用 xlsx.abc() 添加中间行,它将无法编译,因为它知道这是一个无效的方法。
  • 如果你想使用新的语法,你可以写import * as xlsx from "xlsx",然后使用xlsx.IWorkBookxlsx.readFile,或者如果你喜欢import { readFile, IWorkBook } from "xlsx",你也可以单独导入它们。一般来说,对于非 ES6 模块,我总是使用旧语法 (import X = ...),因为如果他们使用了 module.exports = ...,新语法在技术上是无效的。
  • 非常感谢您的回答:)
猜你喜欢
  • 2014-12-28
  • 2019-03-29
  • 2016-12-08
  • 2017-02-09
  • 1970-01-01
  • 2019-11-03
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多