在带有 Typescript 的 AngularJs 项目中使用随 Bower 安装的 ag-grid 时,ag-grid 源 ts 文件中的构建错误

Build errors in ag-grid source ts files when using ag-grid installed with bower in an AngularJs with Typescript project

我发现 ag-grid 依赖项的结构方式及其文档存在 2 个问题。希望有人可以向我推荐一个好的打字稿 Angular1.x 使用 ag-grid 的示例。

我有一个基本的 AngularJs SPA 项目 我安装了 "ag-grid": "3.1.0" bower install ag-grid 通过在 Visual Studio 2015 中向我的 bower.json 添加依赖项,结果它在 bower_components 下添加了以下结构: ag-grid | |-- dist |--src | |--ts | ...

我遇到的问题是 除非我物理删除 /bower_components/ag-grid/src 文件夹 ,否则 Visual Studio 将在该源文件夹下的 ts 文件中显示 926 错误。错误如:

TS2345  Argument of type 'this' is not assignable to parameter of type      'Grid'.
Type 'ag.grid.Grid' is not assignable to type 'ag.grid.Grid'.   TypeScript Virtual Projects C:\MyProject\bower_components\ag-grid\src\ts\grid.ts

以及 bower_components/ag-grid/dist/ag-grid.tsbower_components/ag-grid/src/ts/widgets/agDropdownList.ts 之间的许多重复问题,例如:

TS2300 Build: Duplicate identifier 'AgDropdownList'
TS2300 Build: Duplicate identifier 'AgDropdownList'

我知道有 TS 类 和其他名称重复,Visual Studio 2016 不喜欢这样。 但这是预期的结果吗?为什么要将源代码包含在凉亭依赖项中。是不是万一我想生成(例如 Gulp)我自己的 dist/ag-grid.js?如果是这样,为什么要包括 dist/ag-grid.ts 文件夹,如果它会发生冲突?

我不太熟悉前端开发和任务运行器策略,所以这可能是一种常见做法,开发人员应该删除 /bower_components/ag-grid/src 文件夹。

如果我删除 /bower_components/ag-grid/src 文件夹而不是删除 bower_components/ag-grid/dist/ag-grid.ts 我仍然会收到 13 个错误,例如

TS2304 Build: Cannot find name 'exports'
TS2304 Build: Cannot find name 'module'

它甚至有一个对 /// <reference path="../../typings/tsd" /> 的引用,但由于根本没有 typings 文件夹而被破坏。

感觉这个依赖有点乱是不是?

让我对 ag-grid 感到困惑的另一件事是,在示例中它说 AngularJs controller would need the ngGrid dependency。然而这个依赖关系没有被使用。这是我没有注入依赖项的示例:

观点:

<div ng-controller="app.shipments.ShipmentsController as shipments">
    <h1>Shipments</h1>
    <div ag-grid="shipments.gridOptions" class="ag-fresh" style="height: 100%;"></div>
</div>

打字稿控制器:

module app.shipments {
    'use strict';

    interface IShipmentsScope {
        gridOptions: ag.grid.GridOptions;
    }

    class ShipmentsController implements IShipmentsScope {
        static $inject = [
        ]; 
        constructor() {

        }

        gridOptions: ag.grid.GridOptions = {
            columnDefs: [
                { headerName: "Make", field: "make" },
                { headerName: "Model", field: "model" },
                { headerName: "Price", field: "price" }
            ],
            rowData : [
                { make: "Toyota", model: "Celica", price: 35000 },
                { make: "Ford", model: "Mondeo", price: 32000 },
                { make: "Porsche", model: "Boxter", price: 72000 }
            ]
        };
    }

    angular
        .module('app.shipments')
        .controller('app.shipments.ShipmentsController', ShipmentsController);
}

只要我的服务器服务于 JS 依赖项和 2 css:

,它就可以正常工作
<link href="../bower_components/ag-grid/dist/ag-grid.css" rel="stylesheet" />
<link href="../bower_components/ag-grid/dist/theme-fresh.css" rel="stylesheet" />
<script src="../bower_components/ag-grid/dist/ag-grid.js"></script>

我想我要的是 澄清 为什么 Bower 依赖以这种方式构建,在 VS 中使用这种依赖进行开发时的常见做法是什么?抱怨 TS 错误,并澄清是否有必要将 agGrid 依赖项注入 AngularJs 控制器 。 :-) 谢谢!

我指示 VS2015 不要在构建时编译任何 TypeScript,而不必删除 src 文件夹(我通过 gulp 监视任务这样做),这并不理想,但可以避免我看到重复的错误.

我是通过右键单击项目 > 构建 > 取消勾选 在构建时编译 TypeScript 选项

我仍然不知道为什么根据文档(不是),Angular 1.x 需要在控制器中注入 agGrid。不过这个问题可以关闭了