淘汰TS的打字稿定义错误> 2.2

时间:2018-02-24 13:57:51

标签: asp.net-mvc visual-studio typescript knockout.js

我在Visual Studio中创建了新的空ASP MVC 5.0项目。我添加了以下nuget包:

  • knockout.TypeScript.DefinitelyTyped 1.1.6
  • knockoutjs 3.4.2

我的tsconfig.json文件:

{
    "compileOnSave": true,
    "compilerOptions": {
        "noImplicitAny": false,
        "noEmitOnError": true,
        "removeComments": false,
        "sourceMap": true,
        "target": "es5"
    },
    "exclude": [
       "node_modules",
       "wwwroot"
    ]
}

当我的项目设置为使用TypeScript 2.2并且我构建项目然后一切正常但是如果我更改为使用任何更新的版本例如2.7我在knockout.d.ts文件中收到大约34个错误,如下所示:

Property 'push' of type '(...items: T[]) => void' is not assignable to string index type 'KnockoutBindingHandler'
Property 'remove' of type '{ (item: T): T[]; (removeFunction: (item: T) => boolean): T[]; }' is not assignable to string index type 'KnockoutBindingHandler'

要解决此问题,我已从https://www.npmjs.com/package/@types/knockout下载了新的淘汰赛定义并替换了nuget添加的文件,现在我没有错误。

我的问题: 1.打字稿定义nuget包是最新的吗? 2.如何配置Visual Studio项目以使用npm

1 个答案:

答案 0 :(得分:3)

  

打字稿定义nuget包是最新的吗?

否 - nuget包中提供的knockout.d.ts将无法使用较新版本的TypeScript编译器进行编译,可能会破坏2.4或2.5,因此它已过时。这个答案有关于https://stackoverflow.com/a/45569371/678338

的一些信息
  

如何配置Visual Studio项目以使用npm

我会卸载knockout.TypeScript.DefinitelyTyped nuget包并确保〜\ Scripts \ typings \ knockout \ knockout.d.ts文件已经消失。假设您的计算机上安装了node / npm,请在您的webapp的根目录中执行以下操作

npm init
npm install --save @types/knockout

然后像这样的.ts文件将编译没有错误(你应该在ko引用上获得intellisense)

import * as ko from 'knockout'

class Test {
    name = ko.observable();
}