在typescript中创建接口的最佳方法是什么?

时间:2017-02-17 16:50:37

标签: typescript typescript-typings

我一直在使用1年的打字稿,每次我需要传递一个对象时,我需要以丑陋的方式或手动操作。

在typescript中有类型定义的接口,并保存我们需要的所有参数。有没有办法可以用它来创造对象?

示例:

export interface User {
  name: string;
  email: string;
}

我希望下面的代码能够自动化,我无法从界面rater中创建它我用构造函数创建了一个类。

user {
 name: ''/null/undefined,
 email: ''/null/undefined
}

let user: User = new User() // this will show error

但我可以在下面的课程中创建一个新对象。

export class User {
  constructor() {
    name: string;
    email: string;
  }
}

new User();

哪一个是击球手?创建构造函数类或接口?

3 个答案:

答案 0 :(得分:2)

是的,如果您不需要分配/实例化界面中定义的所有属性,您可以直接为界面分配值,也可以通过它的外观分配值,然后您可以使用?将它们标记为可选。在以下示例电子邮件中,标记为可选,随后的用户分配将是有效的声明。

interface User {
  name: string;
  email?: string;
}

let user: User = { name: '' };

答案 1 :(得分:1)

我认为没有办法。

接口和类是两个不同的东西,有不同的用例。接口只是结构而不能有实例,您将看到生成JavaScript的已编译打字稿,您将无法在任何地方找到接口。

因此接口只在编译时而不是运行时。

但课程是运行时间。因此,当您说新的User()时,它会创建该类的实例,就像生成的JavaScript中那样。

如果符合您的情况,您还可以探索抽象类。

答案 2 :(得分:0)

你可以这样做:

export interface IMyInterface {
  property1: string;
  property2: number;
  property3: boolean;
}

export class MyClass {
  property1: string = '';
  property2: number = 1;
  property3: boolean = false;
  constructor(){}
}

然后实例化:

let newFromInterface = new MyClass();

我通常在共享服务中导出接口和类,然后在我的组件中导入它们并实例化它们。