У меня есть два типа и базовый тип. Базовый тип действительно должен быть абстрактным, но я не уверен в соответствующей терминологии того, как его следует называть. Базовый тип тип Base = {цвет: строка ...

1
Tom 22 Мар 2021 в 15:38

1 ответ

Лучший ответ
  1. Только не экспортируйте тип Base.

  2. Я добавил свойство с типом never, поэтому никому не разрешено использовать чистый тип Base

type Base = {
  color: string,
  distance: number,
  prevent: never,
}

export type A = Omit<Base, 'prevent'> & {
  size: string
}

export type B = Omit<Base, 'prevent'> & {
  rotation: number
}

// error, prevent property missing
// nobody can't create a variable with pure Base type
const x: Base = {
  color: 's',
  distance: 2
}

const y: A = {
  color: 's',
  distance: 2,
  size: 'm',
} //ok


const z: B = {
  color: 's',
  distance: 2,
  rotation: 90
} //ok

Работает ли это для вас?

Я просто не могу представить другие ограничения

Вы также можете добавить disallow name Base в конфигурацию eslint

Я согласен с @VLAZ и @jcalz - у вас не может быть никаких гарантий

2
VLAZ 22 Мар 2021 в 12:56