【问题标题】:Typescript missing properties TS2012打字稿缺少属性 TS2012
【发布时间】:2013-09-17 21:41:32
【问题描述】:

我在两个单独的文件中有两个对象:

import FooResults = require('fooresults');
class FooViewModel {
    Results = ko.observable<FooResults[]>();
}
export = FooViewModel;

还有:

class FooResults {
    Id = ko.observable<number>();
    Text = ko.observable<string>();
}
export = FooResults;

但是FooViewModel抱怨私有访问,所以我切换到一个界面。

import FooResults = require('fooresults');
class FooViewModel {
    Results: KnockoutObservable<IFooResults[]> = ko.observable<FooResults[]>();
}
export = FooViewModel;

还有:

class FooResults implements IFooResults {
    Id: KnockoutObservable<number> = ko.observable<number>();
    Text: KnockoutObservable<string> = ko.observable<string>();
}
export = FooResults;

与:

declare interface IFooResults {
    Id: KnockoutObservable<number>;
    Text: KnockoutObservable<string>;
}

但是现在编译器在编译FooViewModel 时抱怨说它无法将FooResults 转换为IFooResults(尽管FooResults 可以很好地编译为js)。

怎么了?谢谢。

编辑:这是实际错误...

/*

Compile Error. 
See error list for details
 D:/MyWebProject/Scripts/fooviewmodel.ts(18,4): error TS2012: Cannot convert 'KnockoutObservable<FooResults[]>' to 'KnockoutObservable<IFooResults[]>':

    Call signatures of types 'KnockoutObservable<FooResults[]>' and 'KnockoutObservable<Symology.Insight.ViewModels.StreetWorks.Works.IFooResults[]>' are incompatible:

        Type 'FooResults' is missing property 'Id' from type 'IFooResults'.

        Call signature expects 0 or fewer parameters.


*/

【问题讨论】:

    标签: knockout.js requirejs typescript


    【解决方案1】:

    我已经删除了这个类,只使用了接口作为类型。也切换到observableArray。

    class FooViewModel {
        Results = ko.observableArray<IFooResults>();
    }
    export = FooViewModel;
    

    【讨论】:

      【解决方案2】:

      我怀疑错误在其他地方。以下代码段编译得非常好:

      /// <reference path="./knockout.d.ts" />
      
      class FooResults {
          Id = ko.observable<number>();
          Text = ko.observable<string>();
      }
      
      class FooViewModel {
          Results = ko.observable<FooResults[]>();
      }
      

      knockout.d.ts 来自https://github.com/borisyankov/DefinitelyTyped/blob/master/knockout/knockout.d.ts

      PS:也就是说使用observableArray 是有利的。

      【讨论】:

      • 问题是 AMD 模块不喜欢我使用私有类。我的回答后来解决了,我改用了界面。
      猜你喜欢
      • 2021-09-23
      • 2021-04-29
      • 2022-01-17
      • 1970-01-01
      • 2017-11-18
      • 2017-12-22
      • 2018-03-16
      • 2019-05-02
      • 2021-11-13
      相关资源
      最近更新 更多