Из книги (программирование TypeScript, написанной Борисом Черным) я читал об использовании шаблона Companion Object в машинописи. Это означает, что у вас есть тип и объект-значение с одинаковым именем, а объект-значение используется для инициализации экземпляра типа. Реализация его с собственной ссылкой в части значения шаблона означает, что часть значения имеет тип any. Например (из книги):
type Currency = {
unit: 'EUR' | 'GBP' | 'JPY' | 'USD';
value: number;
};
let Currency = {
DEFAULT: 'USD',
from(value: number, unit = Currency.DEFAULT): Currency {
return { unit, value };
}
};
В этом примере значение «Валюта» и параметр «единица измерения» имеют тип any. Исправить единицу достаточно просто.
let Currency = {
DEFAULT: 'USD',
from(value: number, unit: Currency['unit'] = Currency.DEFAULT): Currency {
return { unit, value };
}
};
Но как насчет значения «Валюта», которое неявно имеет тип «any» и не может быть сужено до «as const»? (Я пробовал это) Мне просто интересно, что лучше в этом сценарии, конечно, я мог бы явно объявить тип Валюты любого типа, я мог бы также избежать самоссылки, как это:
let Currency = {
from(value: number, unit: Currency['unit'] = 'USD'): Currency {
return { unit, value };
}
};
Но я думаю, что в некоторых случаях вам действительно может понадобиться собственная ссылка, например, если вы хотите указать значение по умолчанию, например, глубоко вложенный тип объекта. Какой стиль самый лучший?