У меня есть следующие типы:
interface Employee {
employeeType: string
}
interface Manager extends Employee { employeeType: 'MANAGER' // .. etc }
interface Developer extends Employee { employeeType: 'DEVELOPER' // .. etc }
type Staff = Developer | Manager
Я хочу создать новый тип Dynami c, который содержит все возможные строковые литералы для Staff > employeeType
, так что если новый тип Employee
добавленный к Staff
union, их employeeType
добавляется к этому новому типу.
Например, если этот тип был определен и использован вручную, это может быть:
type EmployeeType = 'DEVELOPER' | 'MANAGER'
Я бы хотелось бы иметь возможность добавлять новый тип интерфейса Employee
и обновлять объединение Staff
, а EmployeeType
динамически включать новый тип, например -
...
interface Designer extends Employee { employeeType: 'DESIGNER' // ..etc }
type Staff = Developer | Manager | Designer
// ... now EmployeeType contains 'DEVELOPER' | 'MANAGER' | 'DESIGNER'
Преимущество здесь в том, что возможность принудительной проверки типа при выполнении чего-то подобного:
function createEmployee(employeeType: EmployeeType, attributes: ...) {
// ...
}
В отличие от использования employeeType: string
в качестве ввода.
Есть ли способ выполнить sh это в Typecript? Вот соответствующая Typescript Playground :)
Несколько связанный вопрос (хотя и с использованием Enum
с): { ссылка }