#typescript
Вопрос:
Я использую внешнюю библиотеку с классом и интерфейсами, определенными следующим образом:
export interface LibraryCommunicationProps {
email: string;
phone: string;
}
export interface LibraryThingProps {
name: string;
org: string;
communicationProps: LibraryCommunicationProps;
}
export declare class LibraryThing {
constructor(id: string, props: LibraryThingProps);
}
В файле, который является общим для всего моего пакета, я написал следующее:
export interface PackageCommunicationProps extends Partial<LibraryCommunicationProps> {
readonly email: 'my-email@package.com'
}
export interface PackageThingCommonProps extends Partial<LibraryThingProps> {
readonly org: 'MyOrg'
readonly communicationProps: PackageCommunicationProps
}
export class PackageThingCommon extends LibraryThing {
constructor(id: string, props: PackageThingCommonProps) {
super(id, props)
}
}
Затем у меня есть файл, в котором сделана колбаса:
class SausageThing extends PackageThingCommon {
constructor(id: string) {
super('Sausage', {
name: 'MyName',
communicationProps: {
phone: '555-1234'
}
})
...
}
}
const sausage = new SausageThing('my-id')
Теперь я знаю, что интерфейс представляет собой структуру, которая ожидается и не подходит для определения значений по умолчанию, но я действительно не могу найти способ использовать значения по умолчанию, которые я определил на различных уровнях абстракции, чтобы объект со следующей структурой был передан в качестве props
параметра LibraryThing
:
{
name: 'MyName',
org: 'MyOrg'
communicationProps: {
email: 'my-email@package.com',
phone: '555-1234'
}
}
Это моя последняя итерация после того, как я попробовал множество комбинаций других вещей, включая Omit
классы и вместо интерфейсов, но всегда возникает какая-то проблема. Есть очень хороший шанс, что это может быть далеко от базы в ее текущем состоянии.
Все, что угодно, кроме того, что находится во внешней библиотеке, может быть изменено.
Комментарии:
1. Вы ожидаете, что ваши
Package
типы/классы будут скомпилированы? Это неправильно расширяет библиотеку в данный момент из-заPartial
. У вас также есть три аргумента в вашемSausageThing
супере, когдаPackageThingCommon
вы ожидаете двух. Может быть, я что-то упускаю, но это похоже на проблему «типы не существуют во время выполнения».PackageThingCommon
должны быть фактические строковые значения по умолчаниюorg
и2. @lawrence-witt Я отредактировал аргументы в
SausageThing
супер, чтобы соответствовать ожиданиямPackageThingCommon
.Package
Типы/классы могут не компилироваться. На самом деле важно то, что я хочу, чтобы был создан полный пакет свойств, как я показал, используя значения по умолчанию, установленные на разных уровнях абстракции. ИспользованиеPartial
-это всего лишь (возможно, безрассудная) попытка заставить это работать.