1.静态类型是在编译时进行类型检查的类型。// 声明变量 a 的类型为 numberleta: number =10;// 函数参数和返回值类型声明functionadd(x: number,y: number): number {return x + y;}// 接口定义对象的结构interfacePerson{name: string;age: number;}// 类型别名type Point ={x: number;y: number;};2.动态类型是在运行时确定类型的类型。// JavaScript 中的动态类型let b =10;// b 可以随时被赋予不同类型的值b ='hello';// 合法,b 现在是一个字符串
接口
1.使用interface 关键字来声明接口。
2.接口名称(比如,此处的IPerson),可以是任意合法的变量名称。
3.声明接口后,直接使用接口名称作为变量的类型。
4.如果每一行只有一个属性类型,因此,属性类型后没有;(分号)。
类型别名(自定义类型): 为任意类型起别名。
使用场景: 当同一类型(复杂)被多次使用时,可以通过类型别名,简化该类型的使用。
interface(接口)和type(类型别名)的对比:相同点: 都可以给对象指定类型。
不同点:接口,只能为对象指定类型。类型别名,不仅可以为对象指定类型,实际上可以为任意类型指定别名letperson:{name: string; age: number;myName():string;myAge:()=>number }={name:'jack ',age:19,myName(),myAge()}letperson:{name: string
age: number
myName():string
myAge:()=>number
}={name:'jack ',age:19,myName(),myAge()}interfacePerson{---------当一个对象类型被多次使用时,一般会使用接口((interface)来描述对象的类型,达到复用的目的
name: string
age: number
sayHi:()=>void}letperson1: Person ={iname:'jack',age:19,sayHi()}letperson2: Person ={iname:'tom',age:20,sayHi()}type NArray = number[];----------类型别名
letarr1: NArray =[1,2,3,4]
万能类型
当一个变量的值源于用户输入、动态内容和第三方插件,在不清楚明确类型时,可以定义为 any
型;当只知道一部分值的类型时,也可定义为 any 型leta1: any ={}
函数类型
void表示没有任何类型,常用于函数返回值(加了该类型约束的函数,没有返回值)
另外,在ts中函数的参数和返回值也需要指明类型functionwarnUser():void{console.log("This is my warning message");}functionfn(m:string):string{}letfn1:(m:string)=>string=(m)=>{return``}
使用reactive和ref的类型约束
1.reactive的类型约束:::typescriptimport{ reactive }from'vue';interfaceUser{name: string;age: number;}// 创建一个响应式的 User 对象constuser: User =reactive({name:'Alice',age:25});2.ref的类型约束:::import{ ref }from'vue';// 创建一个响应式的数字const count = ref<number>(0);
父对子传值时的类型约束
1.父组件:::<!-- ParentComponent.vue --><template><ChildComponent :message="parentMessage":count="parentCount"/></template><script lang="ts">import{ defineComponent }from'vue';import ChildComponent from'./ChildComponent.vue';exportdefaultdefineComponent({components:{ChildComponent},data(){return{parentMessage:'Hello from parent',parentCount:10};}});</script>2.子组件:::// ChildComponent.vueimport{ defineComponent, PropType }from'vue';exportdefaultdefineComponent({props:{message:{type: String as PropType<string>,// 定义 message 属性的类型为 stringrequired:true// 可选,指定是否必填},count:{type: Number as PropType<number>,// 定义 count 属性的类型为 numberdefault:0// 可选,指定默认值}},setup(props){// 使用 props.message 和 props.count 来访问传入的属性}});