【问题标题】:Typescript - Adding a function to a defined type打字稿 - 将函数添加到定义的类型
【发布时间】:2014-01-24 06:08:19
【问题描述】:

我正在翻译我的一些代码,并且我注意到打字强制的一种特殊行为。我不确定它是否“特殊”,这很可能是意料之中的,但我很好奇如何绕过它。

对于这个例子,我使用Kendo UIkendoWindow 小部件,但几乎任何类型的库中的任何“类型”都足以演示它。

export function UserWindow(options) {
   var settings = $.extend({
     // default settings
   }, options);

   var $WINDOW = <kendo.ui.Window> {};

   $WINDOW = $("<div id='kendo-editor-window' />")
       .kendoWindow(settings) // this is where we have now declared the type, basically
       .data("kendoWindow");

   // here, I want to add my own little method to kendoWindow for the purpose of how
   // I intend to use it!
   $WINDOW.databind = function(e) {  // this is where we run into trouble!
       // some code goes here
   }

   return $WINDOW;
}

现在在普通的 Javascript 下,这不会给我带来任何麻烦。但是.databind(e) 不是kendoWindow 的定义函数,因此它实际上是在阻止我像这样添加它。

我已经能够通过不将变量声明为kendo.ui.Window 类型来解决它,但我想了解如何适当地处理这种情况,换句话说,正确扩展类型以便我获得智能感知如果可能的话,还有整个类型安全的事情。

【问题讨论】:

标签: typescript


【解决方案1】:

基本类型检查应该(并且将)阻止您分配给不存在的变量(在您的情况下为databind)。因此,您需要先告诉 typescript 存在这样的函数,然后才能分配它。由于接口在 TypeScript 中是开放式的,因此很容易完成,因此添加以下代码:

module kendo.ui{
    export interface Window{
        databind: Function;
    }
}

【讨论】:

  • 不幸的是,这会引发“重复标识符”异常。我不完全确定为什么。 Window 被声明为一个类,而不是一个接口。
猜你喜欢
  • 2020-03-18
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2018-01-16
  • 2021-12-15
相关资源
最近更新 更多