TypeScript интерфейс/тип - префикс, постфикс; interface/type - prefix, postfix;

Это вопрос-ответ для раздела .

Какие имена лучше давать интерфейсам в TypeScript?

Можно ли использовать префикс I?

Почему в TypeScript рекомендуют именовать интерфейсы без префикса “i”?

Как выделить интерфейс без использования префикса?


Ответы (1 шт):

Автор решения: qwabra

Единообразие кода превыше всего.

Выбери любое правило и всегда следуй ему. (или узнай у команды)
Есть одно НО - declaration-merging (читай ниже).

Официальная позиция TS.

Именуй как классы, с заглавной буквы.

declaration-merging

например, чтобы interface, class и namespace объединились в одну сущность они должны иметь одно имя(а правило именования классов мы помним): play

interface SingleTon { qwa: string }
class SingleTon {
    private constructor() { }
}
namespace SingleTon {
    let instance: SingleTon | null = null
    export const getInstance = (): SingleTon =>
        instance
            ? instance
            // @ts-ignore
            : instance = new SingleTon
}
// -,-
const instance = SingleTon.getInstance()
instance.qwa

небольшое уточнение: class что есть instance type а что сonstructor.

interface Co { //instance
    data: any
}
class Co { }
// -,-
type instance = Co
declare var instance: instance
instance.data
// -,-
type Constructor = typeof Co
declare var A: Constructor
const a = new A

Как выделить интерфейс без использования префикса?

Например, вынести в namespace:

class A {
    data: A.I.data
}
namespace A.I {
    export type data = Record<string, string>
}
// -,-
const instance = new A
const data: A.I.data = instance.data
→ Ссылка