【问题标题】:Working with KendoUI, TypeScript and DefinitelyTyped使用 KendoUI、TypeScript 和definitelyTyped
【发布时间】:2014-05-24 21:28:01
【问题描述】:

我正在使用旧版本的 KendoUI (v2013.2.716) 和 TypeScript (v 0.9.5)。我会更新,但一切都会中断,而且我的截止日期很紧。稍后会这样做。

无论如何,我正在使用DefinitelyTyped kendo.d.ts,在我尝试之前一切都很好:

var grid = $('.k-grid').data('kendoGrid');
grid.dataSource.transport.options.read.url = newDataSource;
grid.dataSource.read();

这很好用,但 Visual Studio 不喜欢它。我明白了:

The property 'transport' does not exist on value of type 'kendo.data.DataSource'

我有 had issues like this before 并且很确定我可以制作一个 custom.d.ts 文件来解决此错误,但不确定如何解决。有谁知道我可以如何创建解决方法?

【问题讨论】:

  • “我会更新,但一切都坏了”哈哈是的,这就是 TypeScript 的故事。我在一个项目中使用了 TS 8 个月,每次更新都是一场噩梦。在某些时候,我刚开始将所有内容都转换为 <any>,而忘记了强类型。

标签: javascript visual-studio kendo-ui typescript definitelytyped


【解决方案1】:

我也遇到过类似的问题。 大多数时候,我通过将它投射到任何来修复它。

试试这个 -

 (<any>grid.dataSource.transport).options.read.url = newDataSource; 

或者,你也可以试试这个 -

(<kendo.data.DataSource>.grid.dataSource).transport.options.read.url = newDataSource; 

但是,第一个选项应该可以工作!

希望,这会有所帮助

【讨论】:

  • 谢谢。第一个不起作用。唯一有效的是(&lt;kendo.data.DataSource&gt;grid.dataSource.transport).options.read.url = newDataSource;。但后来我得到The property 'read' does not exist on value of type 'kendo.data.DataSourceOptions' :( 也尝试了不同的组合。
  • 试试这个 --> (grid.dataSource.transport.options.read.url) = newDataSource;
  • 试试这个 --> (grid.dataSource.transport.options.read.url) = newDataSource;或者这个 -> ((grid.dataSource.transport).options.read).url = newDataSource;
  • 嗯。感谢您的帮助,但我已经尝试了您的建议和大量相关格式,但仍然没有运气:(我失去了希望。
  • 它是transport 这不是在定义文件中设置的,所以你不能在括号中包含它。正确的格式是 (&lt;any&gt;grid.dataSource).transport.options.read.url 或者通过将 grid 直接转换为 any 来减少强类型:(&lt;any&gt;grid).dataSource.transport.options.read.url
【解决方案2】:

您可以通过简单地声明它们两次来“扩展”现有类型接口,它们将被合并。

所以,这个:

interface A {
    propB: string;
}
interface A {
    propC: number;
}

将被编译器视为:

interface A {
    propB: string;
    propC: number;
}

在您的情况下,您可以添加自定义声明文件,并添加以下内容:

module kendo {
    interface data {
        interface DataSource {
            transport: any;
        }
    }
}

当然,您也可以为传输添加类型。

【讨论】:

  • 谢谢。使用interface kendo.data.DataSource {...},我在第一个. 上遇到错误...“找不到符号'数据'。
  • 啊,我的错,您需要在结构中指定它,就像在定义文件中一样。我已经更新了我猜应该是结构,但您需要确认
  • 非常感谢您的尝试,但仍然没有运气 :( 我创建了一个 Gist 来解释我的尝试。gist.github.com/dmathisen/10481517
【解决方案3】:

这不是一个特别优雅的答案,但这是我在紧迫的期限内所做的:

grid.dataSource['transport'].options.read.url = newDataSource;

对我来说,通常不建议这样做,因为您使用 typescript 的全部原因是为了维护类型安全,但是在 3rd 方库的情况下,我会通过转换为 any 或使用上面的索引器语法来做例外处理.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-05
    • 2016-05-30
    • 2016-05-15
    • 2017-10-23
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多