使用数据表选项和类型定义时如何解决 TS 编译错误?



我在Visual Studio中创建了一个最小的TypeScript项目。 我使用 jQuery 插件 DataTables。我通过NuGet包管理器为jQuery和数据表添加了TypeDefinitions。一切正常。这些定义通常有效,因为我能够对jQuery和DataTable函数使用IntelliSense自动完成。

但是,一旦我将表配置的选项对象添加到 DataTables 构造函数,我就会收到编译器错误。

window.onload = () => {
$(document).ready(function() {
var table = $('#example').DataTable({
"paging": false
});
});
};

第一个错误是:

严重性代码说明项目文件行抑制状态 错误生成:类型为"{ "分页"的参数:false; } 不可分配给类型为"设置"的参数。 TS_DT_withoutErrors TS_DT_withoutErrors C:\project_path...\TS_DT_withoutErrors\app.ts 3

第二个错误是:

严重性代码说明项目文件行抑制状态 错误 TS2345 (TS) 类型为"{ "分页": false; }"的参数不可分配给类型为"设置"的参数。属性"oFeatures"在类型"{"分页":假; }"中缺失。TS_DT_withoutErrors C:\project_path...\TS_DT_withoutErrors\app.ts

我可以向对象添加一个"oFeatures": null,属性,但这只会将第二条错误消息更改为: 属性'oScroll'在类型"{ "oFeatures" 中缺失:空;"分页":假;}'. 我可以继续添加编译器接下来需要的每个属性,但是在 50+ 行之后,我看不到尽头。

我想定义文件有些不推荐使用,并且需要的属性不再是 DataTables 中的东西,或者它想要内部属性,这些属性不应该由库的用户更改,因为这些属性甚至没有在官方文档中提及。

我知道我可以配置TypeScript编译器的构建设置,忽略错误并且仍然发出捆绑和编译的js文件,但这对我来说并不是一个真正的解决方案。

因此,如果有人能告诉我如何以及在何处贡献和更改 DataTables 定义,或者我如何告诉编译器忽略这两个特定错误,那就太好了。

我使用的软件包如下:

<packages>
<package id="jQuery" version="2.1.0" targetFramework="net45" />
<package id="jquery.dataTables.TypeScript.DefinitelyTyped" version="0.6.7" targetFramework="net452" />
<package id="jquery.TypeScript.DefinitelyTyped" version="3.1.2" targetFramework="net452" />
</packages>

简单的解决方案(TL;灾难恢复使用类型任意)

我意识到有一个简单的解决方案,或者更确切地说是针对这种类型错误的解决方法。只需对设置对象使用类型any

var settingsObj: any = {
"paging": false
}
var table = $('#example').DataTable(settingsObj);

构造函数需要一个类型为DataTables.Settings的参数。当对设置对象使用类型any时,打字稿编译器不会再抛出有关错误参数类型的错误。

更好的方法

最好研究 DataTables typedefiniton 文件的内容,并更改DataTables.Settings类以类似于官方 DataTables 文档的方法。但是只要使用类型也可以正常工作。

var settingsObj: DataTables.Settings = {
"paging": false
//several properties would be expected here 
//or should be removed from DT TypeDefinition file    
}

最新更新