为第三方库创建typescript.d.ts
我正在使用npm的一个简单的第三方库,卡方检验()。它以commonjs风格导出一个(匿名)函数:为第三方库创建typescript.d.ts,typescript,Typescript,我正在使用npm的一个简单的第三方库,卡方检验()。它以commonjs风格导出一个(匿名)函数: module.exports = function(observations, expectations, degreesOfFreedomReduction) { ... } 该函数返回一个带有两个属性的对象,我最感兴趣的属性是“概率”。我使用“NPMI——保存卡方检验”安装了它。我在angular 4中的一个组件中工作。我可以将导出函数与component.ts文件中的此import语句一起
module.exports = function(observations, expectations, degreesOfFreedomReduction) { ... }
该函数返回一个带有两个属性的对象,我最感兴趣的属性是“概率”。我使用“NPMI——保存卡方检验”安装了它。我在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);
文件IChiSquaredResult有一个返回类型的定义,它只是一个接口,具有一个名为“概率”的数字属性。当这个.d.ts文件放在项目目录结构中时,它似乎被忽略了
如果我将目录和文件移到node_modules/@types目录,tsc会注意到它,但不会有帮助。它报告,“错误TS2349:无法调用其类型缺少调用签名的表达式。type'typeof”/home/jrv/Documents/projects/20171130 obacculator/ObaCalc/node_modules/@types/chi squar…”没有兼容的调用签名。“tsc似乎正在查找.d.ts文件,但没有将我的类型定义链接到库返回的匿名函数导出。tsc和intellisense也没有描述他们认为“chiSquaredTest”是什么类型,只是我的使用与签名不匹配。当我右键单击“转到类型定义”时,它将转到我的.d.ts文件中的导出
我也尝试过导入为
import chiSquaredTest = require( 'chi-squared-test' );
结果相似。类型定义如何与我使用的库一样绑定到匿名函数导出?代码本身工作正常,但我无法将@types绑定到导入的函数。我在那里占97.44%。在我的.d.ts文件中,我应该使用:
import { IChiSquaredResult } from './IChiSquaredResult';
declare function chiSquaredTest(actual: number[], expected: number[], degreesOfFreedomAdjustment: number): IChiSquaredResult;
export = chiSquaredTest;
我将其与第二种导入样式结合使用。我怀疑我可以将IChiSquaredResult内部移动到.d.ts文件中,如下所示:,而我无法在本地保存.d.ts文件只是一个小问题。这有点复杂:显然我在以两种不同的方式构建(“ng serve”与“ng build-prod”。一种方法对新样式的导入感到满意,另一种方法则不满意。我切换回了第一种导入样式,但出现了一个错误,即我的类型缺少package.json文件。我添加了一个具有最小属性(名称、版本)的文件,现在两个构建都很满意。我还将接口移动到.d.ts文件:
declare namespace chiSquaredTest{export interface IChiSquaredResult{probability:number;}}}
import { IChiSquaredResult } from './IChiSquaredResult';
declare function chiSquaredTest(actual: number[], expected: number[], degreesOfFreedomAdjustment: number): IChiSquaredResult;
export = chiSquaredTest;