То, что вы работали по стечению обстоятельств , поскольку имена свойств, к которым вы обращались, также были предоставлены в ответе от .post
.На самом деле TypeScript больше не используется после команды tsc
, которая переносит его в исходный код JavaScript.Из-за этого вы теряете все проверки типов во время выполнения.
Если вы жестко закодируете это назначение, например, так:
let me: Person = { firstName: 'Ian', lastName: 'MacDonald', salutation: 'Hello.' };
вы получите ошибку TypeScript при попыткедля создания JavaScript.
Property 'greeting' is missing in type
'{ firstName: string; lastName: string; salutation: string; }'
but required in type 'Person'.ts(2741)
Та же ошибка будет появляться и для любых функций, которые вы определили в своем классе.Это потому, что { ... }
это не ваш тип;он имеет только то, что явно определено.То, что происходит в ответ на ваш сервер, будет подчиняться тем же правилам назначения, но проблема не будет присутствовать (потому что данные отсутствуют) до времени выполнения.
Я рекомендую использовать канал длясоздайте себе экземпляр своего класса, прежде чем что-либо попытается использовать ответ сервера, чтобы любые ошибки могли быть обнаружены при первом контакте, а не через 10 секунд, когда вы наконец попытаетесь получить доступ к действию .save()
, которое не существует.
.post(...).pipe(map((incoming: any) => {
let person: Person = new Person();
person.firstName = incoming.firstName;
person.lastName = incoming.lastName;
person.salutation = incoming.salutation;
return person;
});