代码片段
interface Test{
name: string;
age: number;
//可有可无
sex?:boolean,
//自定义key 任意值
[propName:string]:any,
}
为什么propName还要规定为是string,难道还能有number,boolean,null,undefined,array,object,any,never的类型吗,离谱了吧?
在 JavaScript 中,对象的属性名只能是字符串或者符号类型,而不能是数字、布尔值等其他类型。因此,在 TypeScript 中定义任意属性时,需要指定属性 key 的类型为字符串,以保证类型的正确性。
当然,如果你确信属性 key 是某种特定类型,也可以使用该类型来作为属性 key 的类型,例如:
interface Person {
name: string;
age: number;
[propName: number]: any;
}
但这样会比较少见,大部分情况下还是使用字符串类型来表示属性 key。
interface Girl{
name:string;
age:number;
bust:number;
waistline?:number; //表示可选参数,
[propname:string]:any
}
const girl={
name:'大脚',
age:18,
bust:94,
waistline:12,//这里有值或没值都可以
sex:'女'
}
//把girl传递进来,符合Girl接口的模式
const screenResume=(girl:Girl)=>{
girl.age < 24 && girl.bust >= 90 && console.log(girl.name + '进入面试')
girl.age >= 24 || girl.bust < 90 && console.log(girl.name + '你被淘汰')
}
const getResume=(girl:Girl)=>{
console.log(girl.name + '年龄是' + girl.age)
console.log(girl.name + '胸围是' + girl.bust)
girl.waistline&&console.log(girl.name+'腰围是'+girl.waistline)
girl.sex&&console.log(girl.name+'性别是'+girl.sex)
}
screenResume(girl)
getResume(girl)