有三种方式定义 TypeScript 的 object Types.
1. 匿名类型 - anonymous type
function greet(person: { name: string; age: number }) { return "Hello " + person.name; }
2. 使用 interface
interface Person { name: string; age: number; } function greet(person: Person) { return "Hello " + person.name; }
3. 使用 type alias
type Person = { name: string; age: number; }; function greet(person: Person) { return "Hello " + person.name; }
对象类型中的每个属性都可以指定几项内容:类型、属性是否可选以及是否可以写入该属性。
read only 属性
使用 readonly 修饰符并不一定意味着一个值是完全不可变的——或者换句话说,被 readonly 修饰的属性,并不意味着它的内部内容不能改变。 这只是意味着属性本身不能被重写。
interface Home { readonly resident: { name: string; age: number }; } function visitForBirthday(home: Home) { // We can read and update properties from 'home.resident'. console.log(`Happy birthday ${home.resident.name}!`); home.resident.age++; } function evict(home: Home) { // But we can't write to the 'resident' property itself on a 'Home'. home.resident = { Cannot assign to 'resident' because it is a read-only property.Cannot assign to 'resident' because it is a read-only property. name: "Victor the Evictor", age: 42, }; }