【问题标题】:Public property of exported class is using private type error in TypeScript导出类的公共属性在 TypeScript 中使用私有类型错误
【发布时间】:2013-09-13 20:34:23
【问题描述】:

C:\dev\OpenCMS\Website\Frontend\Scripts\libs\sinnovations>tsc sinnovations.listv iewbase.ts --module amd C:/dev/OpenCMS/Website/Frontend/Scripts/libs/sinnovations/sinnovations.listviewb ase.ts(11,5):错误 TS2025:导出的公共属性“列” 类有或我正在使用私有类型'KnockoutObservableArray'。

/// <reference path="../../typings/knockout/knockout.d.ts" />
import ko = require('knockout');

interface Column {
    label: string;
}

var _templateBase = '/Frontend/Templates/ListView/';
class ListViewBase<T> {

    columns: KnockoutObservableArray<Column> = ko.observableArray([]);
    rows: KnockoutObservableArray<T> = ko.observableArray([]); 

    constructor(public templateHeaderRow = _templateBase+'DefaultTableHeaderTemplate', public templateBodyRow = _templateBase + 'DefaultTableRowTemplate') {

    }

    addColumn(column: Column) {
        this.columns.push(column);
    }

    addRow(row: T) {
        this.rows.push(row);
    }

    static configure(templateBase) {
        _templateBase = templateBase;   
    }
}

export = ListViewBase;

我理解错误,但不知道如何获得上述效果。任何人都有一个解决方案,可以沿着导出为 export = class 的类导出一些接口?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    恐怕您需要在另一个文件中定义接口。例如

    a.ts:

    interface Column {
        label: string;
    }
    

    和你的代码:

    /// <reference path="../../typings/knockout/knockout.d.ts" />
    /// <reference path="./a.ts" />
    import ko = require('knockout');
    
    
    var _templateBase = '/Frontend/Templates/ListView/';
    class ListViewBase<T> {
    
        columns: KnockoutObservableArray<Column> = ko.observableArray([]);
        rows: KnockoutObservableArray<T> = ko.observableArray([]); 
    
        constructor(public templateHeaderRow = _templateBase+'DefaultTableHeaderTemplate', public templateBodyRow = _templateBase + 'DefaultTableRowTemplate') {
    
        }
    
        addColumn(column: Column) {
            this.columns.push(column);
        }
    
        addRow(row: T) {
            this.rows.push(row);
        }
    
        static configure(templateBase) {
            _templateBase = templateBase;   
        }
    }
    
    export = ListViewBase;
    

    【讨论】:

    • 好的。我想我只需要习惯于在单独的文件中定义我的接口。谢谢
    • 我只有一个包含我们所有接口的文件,名为 types.ts
    • 您能解释一下为什么必须在单独的文件中描述它吗?你的建议也对我有用,但似乎很违反直觉..
    猜你喜欢
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2014-02-16
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多