首页 > 解决方案 > 打字稿如何使用包中的类型

问题描述

我创建了一个定义了类型的 NPM 包(包括使用):

(SolarEdge.js)

export type Period = 'DAY' | 'QUARTER_OF_AN_HOUR' | 'MONTH' | 'HOUR' | 'WEEK' | 'MONTH' | 'YEAR';
public getData = async (site: number, start: string, end: string, period: Period) => {}

(index.js)

export { default } from './SolarEdge';

从 ts 编译后,我得到 4 个文件(index.js、index.d.ts、SolarEdge.js、SolarEdge.d.ts)

从我的快速应用程序中使用它时,它抱怨我无法将字符串传递给这个函数,因为它需要一个句点。

错误:'string' 类型的参数不可分配给'Period'.ts(2345) 类型的参数

代码:

    const data = await solaredge.getData(
        parseInt(req.params.site),
        req.params.start,
        req.params.end,
        //'MONTH',
        req.params.period,
    );

req.params.period包含带有“MONTH”或其他内容的字符串。当使用硬编码字符串 MONTH 时,它可以工作,但使用 req.params.period 变量时,它不会。

我试过做:req.params.period as Period但问题是:它找不到句号。

这是如何运作的?

标签: typescripttypescript-typings

解决方案


想要支持 TypeScript 使用者的 TypeScript 库必须在编译期间显式导出其类型并发出声明文件。

看起来您已经在这样做了,因此您应该能够显式导入Period类型以在应用程序代码中使用:

import { getData, Period }  from 'solaredge'

...

const data = await solaredge.getData(
    parseInt(req.params.site),
    req.params.start,
    req.params.end,
    //'MONTH',
    req.params.period as Period,
);

推荐阅读