typescript изменить имя свойства во время компиляции
Допустим есть интерфейс/класс:
interface Book {
i:string;
t:string;
p:number
}
Но писать код с такими "не говорящими" именами сложно, можно как то в typescript изменить имена свойств во время компиляции?
Например:
interface Book {
@name('i')
id:string;
@name('t')
title:string;
@name('p')
price:number
}
Спасибо!
Ответы (2 шт):
Автор решения: Sergei Kirjanov
→ Ссылка
Можно сделать функцию getBookId(book: Book) и везде ее использовать.
function getBookId(book: Book): string { return book.i }
function getBookTitle(book: Book): string { return book.t }
function getBookPrice(book: Book): number { return book.p }
Автор решения: Valera Kvip
→ Ссылка
К сожалению декораторы работают только в runtime(пока что, думаю однажды можно будет). И если не копать глубже то можно решать проблему так:
const ID = 'i';
const TITLE= 't';
const PRICE = 'p';
interface Book {
[ID]:string;
[TITLE]:string;
[PRICE]:number;
}
///....
const book:Book = getBook();
console.log(book[TITLE]);
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Property_Accessors
- имена читабельны
- нет конверторов
- нет оберток
- не нужно копаться в компиляторе