address?: string;
と
address: string | undefined;
を同じと認識されている方が多いようですが、以下のようにキーが存在するかどうか?という点で違いがあります。
interface Person {
name: string;
age: number;
address?: string;
}
const person1:Person = { name:"yamada", age:20 };
const person2:Person = { name:"yamada", age:20, address: undefined };
console.log(person1.address); // undefined
console.log(person2.address); // undefined
console.log(Object.keys(person1)); // [ 'name', 'age' ]
console.log(Object.keys(person2)); // [ 'name', 'age', 'address' ]