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

  • имена читабельны
  • нет конверторов
  • нет оберток
  • не нужно копаться в компиляторе
→ Ссылка