TypeScript: обеспечить, чтобы интерфейс содержал только ключи свойств, которые присутствуют в указанном классе c - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть следующий класс, который используется как сущность для объектно-реляционного маппера:

@Entity("MyEntity")
export class MyEntity {
  @PrimaryGeneratedColumn()
  id!: number;

  @Column("varchar", { length: 2000 * 2 })
  data!: string;

  @CreateDateColumn()
  created!: Date;
}

Теперь по какой-то причине большая часть моего кода не использует этот класс. Вместо этого в коде используется «модель» -интерфейс, который является свободным подмножеством этого класса:

export interface MyModel {
  id: number;
  data: string;
}

Проблема с этим подходом состоит в том, что интерфейсы модели могут легко выйти из синхронизации c с сущностями-классами. Это приводит к моему вопросу:

Как я могу статически обеспечить, чтобы все ключи свойств MyModel также присутствовали в MyEntity?

1 Ответ

1 голос
/ 24 апреля 2020

Я не уверен, получил ли я ваш вопрос, но вы можете implement интерфейс и применить эти свойства.

interface MyModel {
    id: number;
    data: string;
}

// This throws: Class 'MyEntity' incorrectly implements interface 'MyModel'.
class MyEntity implements MyModel {

}

// This works
class MyEntity implements MyModel {
    data: string;
    id: number;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...