2017-02-17 14 views
0

Я использую машинопись от 1 года, и каждый раз, когда мне нужен объект для передачи, мне нужно сделать это уродливо или вручную.Каков наилучший способ создания объекта из интерфейса в машинописных текстах

В машинописном тексте есть интерфейсы для определения типа и содержит весь необходимый нам параметр. Есть ли способ создать объект из него?

пример:

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

Я хочу ниже код, чтобы быть автоматизированы, которые я не могу сделать это из интерфейса рейтер У меня есть создать класс с конструктором.

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(); 

Какой из бритвы? создание класса или интерфейса конструктора?

+0

Что вы подразумеваете под «Я хочу, чтобы код был автоматизирован»? Вы хотите напрямую присвоить значение интерфейсу без создания внедренного класса? – rageit

+0

Да. это возможно? –

+0

Вы также можете создать его с помощью синтаксиса объектного литерала: 'let user: User = {name: '', email: ''};'. Очевидно, вы единственный, кто может определить, что лучше, потому что вы тот, кто жалуется на то, как это делается нормально. –

ответ

1

Я не думаю, что есть способ.

Интерфейс и класс - это две разные вещи и имеют разные варианты использования. Интерфейсы - это просто структура и не может иметь экземпляр. Вы увидите скомпилированный машинописный текст, сгенерированный JavaScript, вы не найдете интерфейсов нигде.

Таким образом, интерфейсы работают только во время компиляции и не работают.

Но классы - это время выполнения. Поэтому, когда вы говорите новый User(), он создает экземпляр этого класса, как он есть в сгенерированном JavaScript.

Вы также можете изучить абстрактный класс, если он подходит в вашей ситуации.

1

Да, вы можете присвоить значение интерфейсу напрямую и его внешностью, если вам не нужно назначать/создавать все свойства, определенные в интерфейсе, тогда вы можете пометить их как необязательные, используя ?. В следующем примере электронная почта помечена как необязательная, и последующее присвоение пользователя будет действительным.

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

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

Мой вопрос отличается! Я пытаюсь создать объект из интерфейса, а не необязательные параметры –

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(); 

Я обычно экспортировал интерфейсы и классы в общей службе, то в моем импорте компонентов их и их экземпляры.

 Смежные вопросы

  • Нет связанных вопросов^_^