#typescript #typing
#typescript #ввод
Вопрос:
Я использую Vue3 и Typescript. По сути, я хочу добиться этого:
export type PersonId = string;
export interface Person {
id: PersonId,
lastSeen: Date
}
export type PersonOrId = Person | PersonId;
PersonOrId.prototype.collapse = function (): PersonId {
let id: PersonId;
if (this.hasOwnProperty('id'))
id = (this as Person).id;
else
id = this as PersonId;
return id;
}
а затем позже в коде используйте функцию, чтобы сделать код более чистым:
let result: PersonOrId = ...
let id = result.collapse()
Но, как оказалось, вы не можете prototype
type
. Могу ли я решить это с помощью interface
? Если да, то как?
Комментарии:
1.
PersonID
это просто псевдонимstring
, и расширениеString.prototype
действительно плохая идея для чего-то подобного. Вы уверены, что вам не нужна просто отдельная функцияtoPersonId(value: PersonOrId): PersonId
? вместо этого? Пример2. @AlexWayne это также сделало бы работу. В будущем я, возможно, захочу добавить больше функций
PersonId
, и это может довольно быстро стать уродливым с глобальными функциями.3. Ну, вы никогда не захотите добавлять методы
PersonId
, потому что это просто строка, и это добавит ее к прототипу ВСЕХ строк. Поэтому вам нужно будет придумать какой-то другой подход здесь. И требовать небольшой вспомогательной функции там, где она вам нужна, довольно просто.4. Спасибо, я пока попробую вспомогательные функции!