【发布时间】:2018-08-29 19:36:46
【问题描述】:
我正在使用来自 npm 的简单第三方库 chi-squared-test (https://www.npmjs.com/package/chi-squared-test)。它以(我相信是)commonjs 样式导出一个(匿名)函数:
module.exports = function(observations, expectations, degreesOfFreedomReduction) { ... }
该函数返回一个具有几个属性的对象,其中对我来说最有趣的是“概率”。我使用“npm i --save chi-squared-test”安装了它。我正在使用 Angular 4 的组件。我可以在我的 component.ts 文件中使用导出的函数和这个 import 语句:
import * as chiSquaredTest from 'chi-squared-test';
函数使用如下所示:
const expected: number[] = <omitted calculation>;
const actual: number[] = <omitted calculation>;
const chiSquaredResult: IChiSquaredResult =
chiSquaredTest(actual, expected, 1);
我一直在尝试为这个第三方库创建一个 .d.ts 文件,所以我将拥有智能感知(在 Visual Studio Code 中,如果这很重要的话)。我尝试了许多变体,但要么得到编译错误,要么没有得到智能感知,也没有迹象表明 typescript 对文件有任何关注。我最近的尝试是在 src 目录下的 @types/chi-squared-test 目录下创建一个文件 'index.d.ts'。
import { IChiSquaredResult } from './IChiSquaredResult';
export default function chiSquaredTest(
actual: number[],
expected: number[],
degreesOfFreedomAdjustment: number): IChiSquaredResult;
文件 IChiSquaredResult 有一个返回类型的定义,它只是一个带有单个数字属性的接口,称为“概率”。这个 .d.ts 文件放在项目目录结构中时似乎被忽略了。
如果我将目录和文件移动到 node_modules/@types 目录,tsc 会注意它,但没有帮助。它报告,“错误 TS2349:无法调用类型缺少调用签名的表达式。类型'typeof“/home/jrv/Documents/projects/20171130 ObaCalculator/ObaCalc/node_modules/@types/chi-squar...'没有兼容的调用签名。”似乎 tsc 正在查找 .d.ts 文件,但没有将我的类型定义链接到库返回的匿名函数导出。tsc 和 intellisense 也没有描述他们认为的类型“chiSquaredTest “是,只是我的使用与签名不匹配。当我右键单击时,“转到类型定义”它会转到我的 .d.ts 文件中的导出。
我也尝试过导入为
import chiSquaredTest = require( 'chi-squared-test' );
结果相似。如何将类型定义绑定到匿名函数导出,就像我正在使用的库一样?代码本身工作正常,但我无法将@types 绑定到导入的函数。
【问题讨论】:
标签: typescript