🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] >[success] # Interface- 接口初探 在之前我们学习了如何定义 **原始数据类型** 和 定义 **数组类型** ,本章将学习如何定义 **object 类型** ,**Interface** 可以定义 **object 类型数据** ,**Interface** 也称之为 **Duck Typing(鸭子类型)**, **Interface** 非常灵活, **可以描述编程语言的各种类型** ,**Interface** 不存在 **javascript** 的概念,所以 **ts 在编译以后,Interface** 是不会被转换到 **js** 文件中的,所以 **它(Interface)只能用来做类型的静态检查** 。 1. **接口用法** **basic-types.ts** ~~~ // 定义接口 interface Iperson { name: string; age: number; } // 定义变量 let viking: Iperson = { name: 'viking', age: 18 } ~~~ 有的 **编程语言建议 interface 名称定义时,第 1 个字母用大写 I**  , 意思是告诉大家这是一个 **interface** ,上面的意思是 **定义一个接口,然后 viking 这个变量用定义好的 Iperson 这个接口的规则,来约束这个变量,需要注意:如果 viking 变量中少属性或多属性会报错,给变量赋值时形状保持与接口一致** 这种情况该怎么办呢,可以使用**可选属性** 2. **可选属性** **可选属性**: **该属性可以是不存在的** ,像下面这样写 **age** 就是可选可不选的。 **basic-types.ts** ~~~ // 定义一个接口 interface Iperson { name: string; age?: number; } // 定义一个变量 let viking: Iperson = { name: 'viking', // age: 20 } ~~~ 3. **只读属性** 有时候我们希望 **对象中的一些属性只能被赋值,后期只能读取,不能修改** ,我们可以用 **readonly** , 这样写: **basic-types.ts** ~~~ // 定义一个接口 interface Iperson { readonly id:number; name: string; age?: number; } // 定义一个变量 let viking: Iperson = { id: 1, name: 'viking', age: 20 } // 修改 id 就会报错 viking.id = 9527 ~~~ **readonly** 与 **const关键字** 有点相似,它们之间的区别是 **readonly 是用在属性上的** ,而 **const 是用在变量上的**。 >[success] ## Interface定义对象属性与值的类型 写法如下: ~~~ // 定义接口 interface Dict { [key:string]: string } // 使用时 const Dict:Dict = { name: '小明' } ~~~