首页 > 其他分享 >来学习typescript 吧! --3 对象、接口类型

来学习typescript 吧! --3 对象、接口类型

时间:2024-12-05 10:43:51浏览次数:6  
标签:typescript name -- age Object 接口类型 let interface string

 

1、Object

Object类型是所有Object类的实例的类型。 由以下两个接口来定义:

Object 接口定义了 Object.prototype 原型对象上的属性

ObjectConstructor 接口定义了 Object 构造函数上的属性

Object 接口包含很多属性,如:constructor、hasOwnProperty、isPrototypeOf、propertyIsEnumerable、toLocaleString、toString 和 valueOf。

这个类型是跟原型链有关的原型链顶层就是Object,所以值类型和引用类型最终都指向Object,所以他包含所有类型。

 

let a:Object = 123
let b:Object = '123'
let c:Object = ()=>123
let d:Object = {}
let e:Object = []
let f:Object = null
let g:Object = undefined
let h:Object = true
// let i:Object = Symbol('123') //错误
// let j:Object = BigInt(123) //错误

2、object

object 代表所有非值类型的类型,例如 数组 对象 函数等,常用于泛型约束

let o:object = {}//正确
let o1:object = []//正确
let o2:object = ()=>123 //正确
let b:object = '123' //错误
let c:object = 123 //错误

3、{} -- 自变量模式

看起来很别扭的一个东西 你可以把他理解成new Object 就和我们的第一个Object基本一样 包含所有类型

tips字面量模式是不能修改值的

let a1: {} = {name:1} //正确
let a2: {} = () => 123//正确
let a3: {} = 123//正确

4、在typescript中,我们定义对象的方式要用关键字interface(接口)

interface Person {
name: string;
age: number;
gender: string;
}

//定义一个函数,接收一个参数,参数类型是Person
function printPerson(person: Person) {
console.log(person.name, person.age, person.gender);
}

//定义一个变量,类型是Person
let person: Person = {
name: "张三",
age: 18,
//gender: "男", //如果这里不写,编译器会报错
}

 

2、重命名interface 可以合并接口

interface A{name:string}
interface A{age:number}
var x:A={name:'xx',age:20}

 

3、接口 继承 extends

interface A{
  name:string
}

interface B extends A{
  age:number
}

let obj:B = {
  age:18,
  name:"string"
}

 

4、可选属性 使用?操作符

interface Person {
 name: string;
 age?: number;
 gender?: string;
}

let person: Person = {
 name: "张三",
 //age: 18,
 //gender: "男",
}

 

5、任意属性 [propName: string]

需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集:

interface Person {
name: string;
age?: number;
[propName: string]: any;
}

let person: Person = {
name: "张三",
age: 18,
gender: "男",
//hobby: "篮球", //正确  
}

 

6、只读属性 readonly

readonly 只读属性是不允许被赋值的只能读取

interface Person {
 readonly id: number;
 name: string;
 age?: number;
 [propName: string]: any;
}

let person: Person = {
 id: 1,
 name: "张三",
 age: 18,
 gender: "男",
 //hobby: "篮球", //正确
}
// person.id = 2; //错误

 

7、添加函数

interface Person {
name: string;
age?: number;
[propName: string]: any;
sayHi(): string;
}

let person: Person = {
name: "张三",
age: 18,
gender: "男",
hobby: "篮球",
sayHi() {
  return "hello"; //正确
},
}    
person.sayHi();
 

标签:typescript,name,--,age,Object,接口类型,let,interface,string
From: https://www.cnblogs.com/zhuangdd/p/18588023

相关文章

  • 中电金信:加速数以智用,源启·数据资产平台创新思考
    在数字化向智能化的快速跃迁中,数据已成为核心驱动力。随着大数据、云计算和人工智能技术的发展,数据的价值正在被重新定义和深度挖掘。数据的智能化应用,正在推动各行各业的转型升级,为经济发展注入新动能。 加速推动“数以智用”,赋能行业数智化转型升级,中电金信针对源启·数据资......
  • 超级的美化博客~~
    设置https://i.cnblogs.com/settings到这里设置,把“显示行号”叉掉!页面定制CSS码往下翻,把下面代码复制到“页面定制CSS码”~~#blogLogo,.blogStats{float:right}.day,.div_my_zzk,.entrylistPostSummary,.feedbackCon,.feedbackItem,.postCon,.postMeta,.postSticky{position......
  • 巨头英特尔打响反对人工智能的第二枪
    序言:新技术的普及往往并非一帆风顺。每当生产力发展遇到瓶颈,人类社会总需要一种新的技术来推动经济进步。对陌生事物的怀疑和不信任是正常的,反而如果每个人都一致认为某项技术完美无缺,那可能就需要警惕了。以英特尔为代表的企业对AI的谨慎态度,恰恰反映了大多数企业的真实想法。A......
  • 离线数据同步变迁
    第一代-基于Hadoop体系的离线数据同步一、背景随着业务的发展,系统进行了微服务的差分,导致数据越来越分散,很难进行一个完整的生命周期的数据查询,对于某些业务的需求支持变得越来越难,越来越复杂,也越来越难以进行职责划分。对着业务的发展,数据量越来越大之后,为了良好的业务支持,进行......
  • 【雷达信号分选】自相关函数法分选及Matlab仿真实现
    1、概述    自相关函数法是重频分选中的基础且重要的算法,在分选领域中占据主要地位。许多后续的重频分选算法,如直方图法和PRI变换法等,均是在其基础上进行改进。这些改进方法的核心思想是利用自相关函数对脉冲到达时间(TOA)差值(即DTOA)进行分析,进而提取PRI信息。2、......
  • vue实现预览的图片进行下载
    代码如下:downImg("图片路径",'下载图片名称');downImg=(textUrl,name)=>{  fetch(textUrl).then(res=>{    res.blob().then(blob=>{      leta=document.createElement('a');      leturl=window.URL.cr......
  • 光谱相机:开启多元领域洞察新视界
    在当今科技飞速发展的时代,光谱相机作为一项尖端的光学技术产品,正以其独特的魅力和卓越的性能,以前所未有的深度和广度渗透到众多行业领域,为各领域的发展带来革命性的变革与突破,成为现代科技领域中一颗璀璨夺目的明珠。那么,光谱相机究竟是如何实现这些神奇功能的呢?这背后离不开其......
  • OceanBase 的探索与实践
    作者:来自vivo互联网数据库团队-XuShaohui本文总结了目前我们遇到的痛点问题并通过OceanBase的技术方案解决了这些痛点问题,完整的描述了OceanBase的实施落地,通过迁移到OceanBase实践案例中遇到的问题与解决方案让大家能更好的了解OceanBase功能与特性,最后总结了Oce......
  • YOLOv6
    YOLOv6是继YOLOv5之后,由Meituan的团队开发的一个目标检测模型。YOLOv6的目标是进一步提高模型的性能,特别是在处理速度、准确度、以及模型的精简化方面,并且它在一些特定任务上进行了优化。YOLOv6引入了多个创新,并优化了网络架构、训练策略以及推理效率。YOLOv6的特点与......
  • 光圈与快门速度
    光圈,快门速度和感光度是控制传感器获得光量的三大支柱,通过这三个可以完美的获得正确的曝光。但是光圈和快门是摄影者在观看图片时最重要的影响因素。光圈影响着景深,快门速度控制着运动。一.什么是光圈光圈是一个用来控制光线透过镜头,进入机身内感光面光量的装置,它通常是在镜......