ts笔记(三)

181 阅读1分钟

对象类型-接口

interface Person {
    name: string;
    age?: number;// 可选属性,调用Person时,age可以忽略
    [propName: string]: any; // 任意属性
}

let tom: Person = {
    name: 'Tom',
    gender: 'male'
};

注意:

1)赋值时,变量应该跟接口保持一致,不能添加未定义属性    
2)一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集
interface Person {
   name: string;
   age?: number;
   [propName: string]: string;
}

let tom: Person = {
   name: 'Tom',
   age: 25,// 此处会报错
   gender: 'male'
};

错误信息:Property 'age' of type 'number | undefined' is not assignable to string index type 'string | number' 原因:定义了任意属性,那确定的属性和可选的属性类型都必须是他的类型的子级

错误的修改:[propName: string]: string | number; 正确的修改: [propName: string]: number | string | undefined

interface Person {
    readonly id: number; // 只读属性 
    name: string;
    age?: number;
    [propName: string]: any;
}

let tom: Person = {
    id: 89757, // 只能在此处赋值,别处的任何位置都不可以只读的约束存在于第一次给对象赋值的时候,而不是第一次给只读属性赋值的时候:
    name: 'Tom',
    gender: 'male'
};