export default interface Hero {
id: number;
name: string;
extra?: string;
}
Насколько я помню, есть еще такая нотация:
hero: Partial<Hero> = {...};
https://www.typescriptlang.org/docs/handbook/advan...
// EDIT
Неправильно понял вопрос. Кажется, они забыли обновить документацию/примеры...
Я это поведение давно считаю дефолтным, и еще поверх вешаю кучу strict правил TS + TSLint.
https://www.typescriptlang.org/docs/handbook/relea...
Stricter object literal assignment checks
TypeScript 1.6 enforces stricter object literal assignment checks for the purpose of catching excess or misspelled properties. Specifically, when a fresh object literal is assigned to a variable or passed as an argument for a non-empty target type, it is an error for the object literal to specify properties that don’t exist in the target type.
Собственно, если такое Вам не нравится (тогда зачем вообще ts??) - попробуйте те решения, что я предложил.
// EDIT 2
То поведение, которое Вы хотите, называется "утиная типизация". Например, она заложена в "ооп" модель golang.
Насколько мне известно, классические языки со строгой типизацией такое не допускают. И я с ними согласен.