interface objType{
name:string,
age:number,
height:number
}
// 添加address后就会报错
let obj:objType={
name:"张三",
age:20,
height:150,
address:"你猜我在哪"
}
export {
}
但是当我们把需要的属性添加给一个新的对象并且不使用接口的时候就不会报错
如下:
interface objType{
name:string,
age:number,
height:number
}
// 创建一个新变量info
let info={
name:"李四",
age:20,
height:150,
address:"我在这"
}
// 字面量赋值给obj
// 给要添加的obj描述接口
let obj:objType=info
console.log(info);
console.log(obj);
原因:
如果直接使用字面量赋值给对象的时候默认会进行类型推导 也就意味着 对象obj当中相对于objType接口会多出一个address类型 所以会报错 但是如果使用这种变量赋值的方法相当于赋值的是引用 在ts当中编译类型的时候会做出擦除(freshness)的操作
接口(objType)擦除(freshness)简单的理解来说是指如果赋值的对象info相对于接口(objType)中描述的类型如果全部都满足的话就不会报错 如果info中缺少一个objType中的属性的话就会报错
但是这种用法还是会有bug!!
function fn(num: fnType) {
// 在这里不能使用address 也就是接口描述中所没有的属性
console.log(num.address);
}
let n = {
name: "王五",
age: 20,
address: "就不告诉你"
}
// 不会报错
fn(n)
如果我们使用objType中没有描述过的属性的话是会报错的 我们会发现他会走接口编译的过程的
原文地址:https://blog.csdn.net/m0_69507175/article/details/126843370
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_40658.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。