В TypeScript можно определить динамическое свойство у интерфейса в зависимости от значения соседнего поля путем использования условных типов.
Предположим, у нас есть интерфейс User
с двумя полями: isAdmin
и permissions
. Мы хотим, чтобы тип permissions
был динамическим в зависимости от значения поля isAdmin
. Если isAdmin
равно true
, то тип permissions
должен иметь значения "read" и "write", а если isAdmin
равно false
, то тип permissions
должен иметь только значение "read".
Мы можем определить интерфейс User
следующим образом:
interface AdminUser { isAdmin: true; permissions: ("read" | "write")[]; } interface RegularUser { isAdmin: false; permissions: "read"; } type User = AdminUser | RegularUser;
Теперь, если мы определяем переменную типа User
с полем isAdmin
равным true
, TypeScript будет обязывать нас определять поле permissions
с типом ("read" | "write")[]
, а если isAdmin
равно false
, поле permissions
автоматически будет иметь тип "read"
.
Например:
const admin: User = { isAdmin: true, permissions: ["read", "write"] }; const regular: User = { isAdmin: false, permissions: "read" };
Обратите внимание, что в интерфейсе User
мы используем объединение типов (|
) и условный тип (type
) для определения динамического типа свойства permissions
. Это позволяет TypeScript определять тип permissions
в зависимости от значения isAdmin
.
Таким образом, мы можем использовать условные типы в TypeScript для определения динамического свойства у интерфейса в зависимости от значения соседнего поля.