interface不存在于JavaScript 用来做类型的静态检查
// interface Person {
// readonly id: number; // readonly只读属性不允许改变
// name: string;
// age?: number // 加上问号 表示是可选属性
// }
// // let hky: Person = {
// // name: 'hky'
// // }
// // 比接口少一些或者多一些属性是不被允许的
// // Interface.ts:6:5 - error TS2741: Property 'age' is missing in type '{ name: string; }' but required in type 'Person'.
// let hky: Person = {
// id: 123,
// name: 'hky',
// age: 20
// }
// // 报错 只读属性不允许被改变
// hky.id = 123 // => Interface.ts:18:5 - error TS2540: Cannot assign to 'id' because it is a read-only property.
// Function 函数
// 可选参数后不能 添加确定的参数 会使系统类型判断出现混乱
const add = (x: number, y: number, z?: number): number => { // 箭头不是es6中的箭头函数 而是TS中声明函数类型返回值的方法
if (typeof z === 'number') {
return x + y + z
} else {
return x + y
}
}
// 不允许超出 约定参数
// 约定好类型 也不允许改变
// z为可选属性
interface Fun {
(x: number, y: number, z?: number ): number // interface 声明函数类型
}
// let add2 = (x: number, y: number, z?: number ) => number = add
let add2: Fun = add
//在TS中:后都是声明的类型 与逻辑并没有什么关系
// 鸭子类型 (duck typing)