howto:可选(嵌套)类属性?

时间:2015-09-12 06:43:50

标签: interface typescript

我有一个类,我想要一些可选的嵌套属性。

class Input {
    stuff {
        first_name?: string;   // optional
    };
然而,似乎这不是合法的打字稿。 ; expected

接下来是把东西拉进界面

interface IFrom {
    id: any;
    first_name?: string;
};

class Input {
    from:IFrom;

然而,当我把它们放在同一个文件中时,我得到了

tsPublic property 'from' of exported class has or is using private name 'IFrom'.

我无法制作public interface

'public' modifier cannot appear on a module element.

我最终做的是将界面放在另一个文件中,但这将成为宇航员工程,其中每个结构和属性都需要在自己的文件中...

我错过了一些关于如何做到最好的事情吗? 我希望first_name属性是公共的,但是结构的一部分。 希望它是可选的。 更喜欢单个文件。

谢谢!

2 个答案:

答案 0 :(得分:1)

您应该将关键字export与接口和类一起使用,而不是public

以下是一个例子:

module ModuleA {
  export interface IFrom {
      id: any;
      first_name?: string;
  }
}

module ModuleB {
  export class Input {
      from:ModuleA.IFrom;
  } 
}

var input = new ModuleB.Input();

input.from = {id: 123, first_name: 'Bob'};

alert(input.from.first_name); // Bob

答案 1 :(得分:1)

  然而,似乎这不是合法的打字稿。 ;预期

内联类型的语法不正确。您错过了:。以下工作正常:

class Input {
    stuff: {
        first_name?: string;   // optional
    };
}

这回答了这个问题。但是因为你尝试了更多的东西:

  

来自导出类的公共属性'已经或正在使用私有名称'IFrom'。

您可能拥有export class ...这意味着您还需要执行export interface 来导出该类使用的任何界面。