Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为第三方库创建typescript.d.ts_Typescript - Fatal编程技术网

为第三方库创建typescript.d.ts

为第三方库创建typescript.d.ts,typescript,Typescript,我正在使用npm的一个简单的第三方库,卡方检验()。它以commonjs风格导出一个(匿名)函数: module.exports = function(observations, expectations, degreesOfFreedomReduction) { ... } 该函数返回一个带有两个属性的对象,我最感兴趣的属性是“概率”。我使用“NPMI——保存卡方检验”安装了它。我在angular 4中的一个组件中工作。我可以将导出函数与component.ts文件中的此import语句一起

我正在使用npm的一个简单的第三方库,卡方检验()。它以commonjs风格导出一个(匿名)函数:

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;