Продолжаю переводитьпроект на тайпскрипт, параллельно изучая этот самый тайпскрипт.
всё сделано на фреймворке 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 не надо было проставлять?