<template> <div class="about"> <h1>This is an about page</h1> </div></template><script lang="ts">// ts 很好啊 开发人员要拥抱技术// 规定传递什么 就传递什么 目标比较明确// 规定它传入的属性 及属性的数据类型// 接口interface LabelValue { name: string;}// 可选属性interface SquareConfig { color?: string; width?: number;}// 只读属性interface Point { readonly x: number; readonly y: number;}// 函数类型interface SearchFunc { (source: string, substring: string): boolean;}// 接口也可以继承interface fa { name: string;}interface child extends fa { money: number;}// 混合类型import { defineComponent, onMounted } from "vue";export default defineComponent({ setup() { let aa = (bb: LabelValue): void => { console.log("结果:", bb.name); }; let create = (config: SquareConfig): { color: string; area: number } => { let newSquare = { color: "white", area: 1000 }; if (config.color) { newSquare.color = config.color; } if (config.width) { newSquare.area = config.width * config.width; } return newSquare; }; let p1: Point = { x: 10, y: 20 }; // 只能读 不能改写 // p1.x = 5; // 数组只读 let arr: number[] = [3, 2, 5]; let ro: ReadonlyArray<number> = arr; // 数组只读 // ro[0] = 12; error // ro.push(5) error // ro.length = 100 error // arr = ro error // 可以采用类型断言覆写 arr = ro as number[]; arr[0] = 222; console.log("结果:", arr, ro); let mySearch: SearchFunc; mySearch = (source, substring) => { let result = source.search(substring); return result > -1; }; console.log("结果:333", mySearch("xiaohua", "p")); let kk = <child>{}; kk.name = "kk"; kk.money = 20; console.log("结果:kk", kk); onMounted(() => { let obj = { name: "xiaoming", }; aa(obj); console.log("结果:", create({ color: "black", width: 5 })); }); },});</script>