Задать вопрос
Fragster
@Fragster
помогло? отметь решением!

Как небольно избавится от as const для обхода ошибки 'type string is not assignable to type keyof' и '"center" | «right» | «left» | undefined'?

Продолжаю переводитьпроект на тайпскрипт, параллельно изучая этот самый тайпскрипт.
всё сделано на фреймворке quasar, там есть компонент QTable, который позволяет типизировать описание колонок, предотвращая ошибки в имени поля, примерно таким образом:
interface ProfileEntity {
  id: string,
  first_name: string,
  last_name: string
}
const columns: QTableColumn<ProfileEntity>[] = ([
{ name: 'id', label: 'id', field: 'id' as const },
{ name: 'first_name', label: 'Имя', field: 'first_name' as const, sortable: true },
{ name: 'last_name', label: 'Фамилия', field: 'last_name' as const, sortable: true, align: 'right' as const }
]).map(c => ({align: 'left', ...c}))


Этот map нужен из-за странного решения разработчиков quasar, когда по дефолту выравнивание всех колонок идет по правому краю.

Так вот, приходится ко всем полям field (имеет тип keyof ProfileEntity) и align (имеет тип "center" | "right" | "left" | undefined) везде проставлять as const чтобы он не выдавал ошибку на случай, если я когда-то потом захочу поменять значение на несовместимое.

Есть ли какая-то настройка чтобы это поведение сделать более удобным?

Если сделать так:
const columns: QTableColumn<ProfileEntity>[] = [
{ name: 'id', label: 'id', field: 'id' }  as QTableColumn<ProfileEntity>,
{ name: 'first_name', label: 'Имя', field: 'first_name', sortable: true }  as QTableColumn<ProfileEntity>,
{ name: 'last_name', label: 'Фамилия', field: 'last_name', sortable: true, align: 'right' }  as QTableColumn<ProfileEntity>,
].map(c => ({align: 'left', ...c}))
то все работает включая проверку правильности значений field и align, но приходится для каждого элемента прописывать тип, что сильно замусоривает код. Если же сделать
const columns: QTableColumn<ProfileEntity>[] = ([
{ name: 'id', label: 'id', field: 'id' },
{ name: 'first_name', label: 'Имя', field: 'first_name', sortable: true },
{ name: 'last_name', label: 'Фамилия', field: 'last_name', sortable: true, align: 'right' },
] as QTableColumn<ProfileEntity>[]).map(c => ({align: 'left', ...c}))


то проверка свойств почему-то перестает работать. Есть ли способ, чтобы и проверка работала и кучу as type не надо было проставлять?
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Средний 11 комментариев
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
Как вариант:
ссылка

ProfileEntity теперь type, не interface
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы