#typescript
#typescript
Вопрос:
У меня есть интерфейс, определенный с некоторыми свойствами. Я хочу создать объект из этого интерфейса, однако при создании я не хочу полностью инициализировать все свойства, упомянутые в интерфейсе. Я просто хочу инициализировать несколько. Как я могу этого добиться? Спасибо.
export interface Campaign {
id: string;
name: string;
createdOn: string;
lastUpdated: string;
createdBy: User;
type: CampaignType;
status: CampaignStatus;
startDate: string;
endDate: string;
budget: number;
description: string;
account: Account;
}
я хочу создать массив объектов campaign.
это то, что я пытаюсь сделать.
let campaigns: Campaign[] = [
{ id:"1",
name: "test campaign"
}
];
однако я получаю следующую ошибку.
В типе ‘{id: string; name: string; }’ отсутствуют следующие свойства из типа ‘Campaign’: CreatedOn, lastUpdated, CreatedBy, type и еще 6.ts(2740)
Комментарии:
1. Но почему? Если объект реализует интерфейс
X
, я ожидаю, что он будет иметь все свойства и методы, определенные интерфейсомX
. Зачем еще мне вообще использовать интерфейс?2. это только для тестирования.
Ответ №1:
вы можете использовать частичное —
let campaigns: Partial<Campaign>[] = [
{ id:"1",
name: "test campaign"
}
];
Комментарии:
1. хорошо, это круто, люблю TS за его подход «только правильное количество ввода» — мне не всегда нужны все 8 свойств в APIGatewayProxyEvent (например, для теста)
Ответ №2:
если вы сделаете необязательные свойства обнуляемыми, это должно сработать.
пример:
type User = {
firstName: string;
lastName?: string;
};
// We can assign a string to the "lastName" property
let john: User = { firstName: "John", lastName: "Doe" };
// ... or we can explicitly assign the value undefined
let jane: User = { firstName: "Jane", lastName: undefined };
// ... or we can not define the property at all
let jake: User = { firstName: "Jake" };
Ответ №3:
Вы можете пометить свойства, для которых вы не хотите устанавливать значение при создании, как необязательные, выполнив { propName?: propType }
или, если вы хотите пометить все свойства как необязательные, вы можете использовать Partial
Partial<{
prop1: string,
prop2: number,
}>