我正在使用npm的简单第三方库,chi-squared-test(https://www.npmjs.com/package/chi-squared-test)。它导出一个(匿名)函数(我相信)commonjs风格:
module.exports = function(observations, expectations, degreesOfFreedomReduction) { ... }
该函数返回一个具有几个属性的对象,其中最有趣的是名为" probability"。我使用" npm i --save chi-squared-test安装它。"我在角度4的组件中工作。我能够在component.ts文件中使用导出的函数和导入语句:
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文件,所以我将使用intellisense(在Visual Studio Code中,如果这很重要)。我已经尝试了许多变体,但要么得到编译错误,要么没有智能感知,也没有迹象表明打字稿正在关注文件。我最近的一次尝试是创建一个文件&quot; index.d.ts&#39;在src目录下的@ types / chi-squared-test目录下。
import { IChiSquaredResult } from './IChiSquaredResult';
export default function chiSquaredTest(
actual: number[],
expected: number[],
degreesOfFreedomAdjustment: number): IChiSquaredResult;
文件IChiSquaredResult有一个返回类型的定义,它只是一个带有一个名为&#34; probability&#34;的数字属性的接口。将此.d.ts文件放在项目目录结构中时,似乎会被忽略。
如果我移动目录&amp;文件到node_modules / @ types目录,tsc会引起注意,但没有帮助。它报告,&#34;错误TS2349:无法调用其类型缺少调用签名的表达式。键入&#39; typeof&#34; / home / jrv / Documents / projects / 20171130 ObaCalculator / ObaCalc / node_modules / @ types / chi-squar ...&#39;没有兼容的呼叫签名。&#34;似乎tsc正在找到.d.ts文件,但是没有将我的类型定义链接到库返回的匿名函数导出。 tsc和intellisense也没有描述他们认为的类型&#34; chiSquaredTest&#34;只是我的使用与签名不匹配。当我右键单击时,&#34;转到类型定义&#34;它转到我在.d.ts文件中的导出。
我也尝试过导入
import chiSquaredTest = require( 'chi-squared-test' );
有类似的结果。如何将类型定义绑定到匿名函数导出,就像我正在使用的库一样?代码本身工作正常,但我无法将@types绑定到导入的函数。
答案 0 :(得分:1)
import { IChiSquaredResult } from './IChiSquaredResult';
declare function chiSquaredTest(actual: number[], expected: number[], degreesOfFreedomAdjustment: number): IChiSquaredResult;
export = chiSquaredTest;
我将它与第二种导入样式结合使用。我怀疑我可以将IChiSquaredResult内部移动到.d.ts文件中,如下所示:Create d.ts file for existing library exporting function,我无法在本地保存.d.ts文件是一个小问题。