【TypeScript入门】TypeScript入门篇——对象

news2024/11/15 12:45:06

        

        对象其实就是一种封装的概念,它把事物封装成一个类,然后提供类的接口,而具体的过程人们是看不到的。


一、对象实例

二、TypeScript 类型模板

三、鸭子类型(Duck Typing)


对象是包含一组键值对的实例。 值可以是标量、函数、数组、对象等,如下实例:

var object_name = { 
    key1: "value1", // 标量
    key2: "value",  
    key3: function() {
        // 函数
    }, 
    key4:["content1", "content2"] //集合
}

以上对象包含了标量,函数,集合(数组或元组)。

一、对象实例

var sites = { 
   site1:"Runoob", 
   site2:"Google" 
}; 
// 访问对象的值
console.log(sites.site1) 
console.log(sites.site2)

编译以上代码,得到以下 JavaScript 代码:

var sites = { 
   site1:"Runoob", 
   site2:"Google" 
}; 
// 访问对象的值
console.log(sites.site1) 
console.log(sites.site2)

输出结果为:

Runoob

Google

二、TypeScript 类型模板

假如我们在 JavaScript 定义了一个对象:

var sites = { 
   site1:"Runoob", 
   site2:"Google" 
};

这时如果我们想在对象中添加方法,可以做以下修改: 

sites.sayHello = function(){ return "hello";}

如果在 TypeScript 中使用以上方式则会出现编译错误,因为Typescript 中的对象必须是特定类型的实例。 

var sites = {
    site1: "Runoob",
    site2: "Google",
    sayHello: function () { } // 类型模板
};
sites.sayHello = function () {
    console.log("hello " + sites.site1);
};
sites.sayHello();

编译以上代码,得到以下 JavaScript 代码: 

var sites = {
    site1: "Runoob",
    site2: "Google",
    sayHello: function () { } // 类型模板
};
sites.sayHello = function () {
    console.log("hello " + sites.site1);
};
sites.sayHello();

输出结果为: 

hello Runoob

此外对象也可以作为一个参数传递给函数,如下实例: 

var sites = { 
    site1:"Runoob", 
    site2:"Google",
}; 
var invokesites = function(obj: { site1:string, site2 :string }) { 
    console.log("site1 :"+obj.site1) 
    console.log("site2 :"+obj.site2) 
} 
invokesites(sites)

编译以上代码,得到以下 JavaScript 代码: 

var sites = {
    site1: "Runoob",
    site2: "Google"
};
var invokesites = function (obj) {
    console.log("site1 :" + obj.site1);
    console.log("site2 :" + obj.site2);
};
invokesites(sites);

输出结果为: 

site1 :Runoob

site2 :Google

三、鸭子类型(Duck Typing)

鸭子类型(英语:duck typing)是动态类型的一种风格,是多态(polymorphism)的一种形式。

在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。

可以这样表述:

"当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。"

        在鸭子类型中,关注点在于对象的行为能做什么,而不是关注对象所属的类型。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为"鸭子"的对象,并调用它的"走"和"叫"方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的"走"和"叫"方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的"走"和"叫"方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。

interface IPoint { 
    x:number 
    y:number 
} 
function addPoints(p1:IPoint,p2:IPoint):IPoint { 
    var x = p1.x + p2.x 
    var y = p1.y + p2.y 
    return {x:x,y:y} 
} 
 
// 正确
var newPoint = addPoints({x:3,y:4},{x:5,y:1})  
 
// 错误 
var newPoint2 = addPoints({x:1},{x:4,y:3})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常用命令——lsof命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) lsof 显示Linux系统当前已打开的所有文件列表lsof -p pid 补充说明 lsof命令用于查看你进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系…

十四、Node.js 中 session验证登录

在前一篇内容中讲到这个cookie实现验证登录,cookie是存储在客户端的,而session是存储在服务器的,相比较session的安全性会更高,session对象存储特定用户会话所需要的属性以及配置信息,服务通过session对象将用户的信息…

CPU使用率过高的原因及解决方法

常见的CPU使用率过高可不是职场CPU哦,而是电脑的中央处理器,CPU作为计算机系统重要的运算和控制核心,可谓是“很忙”的存在。在我们日常使用电脑设备时,由于打开的软件、游戏、网页等程序容易导致电脑运作卡顿,这时候就…

《图机器学习》-Traditional Methods for Machine Learning in Graphs

Traditional Methods for Machine Learning in Graphs前言一、Node-Level Tasks and Features二、Link-Level Tasks and Features三、Graph-Level Tasks and Features前言 图机器学习任务可以分为三种: Node-level prediction:节点级的预测 如对节点进…

最优控制学习笔记3----无约束条件的泛函极值问题

无约束条件的最优控制问题 设函数 x(t)x(t)x(t) 在 [t0,tf][t_0, t_f][t0​,tf​] 区间上连续可到,考虑 Lagrange型性能指标函数 J[x(t)]∫t0tfL[x(t),x˙(t),t]dtJ[x(t)]\displaystyle\int_{t_0}^{t_f}L[x(t), \dot{x}(t), t]dtJ[x(t)]∫t0​tf​​L[x(t),x˙(t),…

Linux---常见指令

目录 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令 06.rmdir指令 && rm 指令 07.man指令 08.cp指令 09.mv指令 10. cat指令 11.more指令 12.less指令 13.head指令 13.tail指令 简述重定向和管道概念: 14.时间相关的指令 15.Ca…

Git Fork操作与配置

我理解的git fork:将别人(张三)仓库包括文件,提交历史,issues等复制一份到自己的github账号下。我们在可以通过修改本地项目的代码,然后,给(张三)发送一个Merge Request&…

C. Yet Another Tournament(贪心)

Problem - C - Codeforces 通用领域 医学 计算机 金融经济 你正在参加另一场比赛。有n1个参与者:你和其他n个对手,编号从1到n。 每两名参与者将相互竞争一次。如果对手i和对手j比赛,他获胜当且仅当i>j。 当我的对手和你对弈时,一切都变…

rabbitmq+netcore6 【4】Routing:路由

文章目录1)前言2)Direct exchange 直接类型的交换机3)Multiple bindings 多绑定4)Emitting logs 发送日志5)Subscribing 订阅6)综合以上代码准备工作生产者消费者1消费者2消费者3运行结果官网参考链接&…

USB大容量存储设备浅析

一 USB 设备类 SB 引入了设备类的概念,根据每一类驱动程序的功能将USB设备分为几大类,标准的几大类包括: 大容量存储类 网络类 集线器类 串行转换器 音频类 视频类 图像类 调制解调器 打印机 HID(Human Interface Device 人机接口设备)每一…

我记不住的那些编程语言的语法(数组)-1

背景:我记不住各种语言的语法,例如C、Java、Go、Python、JavaScript,大概就是常用的这几种语言,每种语言有其自己的语法规范,有的时候会记混了,所以想记录一下细节。这个系列会不定期的更新,本期…

一路坎坷,入局到突破【2022年度总结】

秃秃 1> 来到CSDN: 2019年5月时决定只身一人去外省实习,顺便在CSDN这个“资源库”注册了一下账号。直到我20年在公司做技术分享时,才真正开始在CSDN上的创作; 21年的时候也只是把CSDN当做笔记,就自己写一写&…

行业洞察|猴子可以打字,动物走进元宇宙还有多远?

很多学者和专家认为,人类与动物的区别在于语言的使用。人类可以使用语言,但是动物不会。其实也许是我们人类听不懂动物的语言,并不是他们不会使用。本质在于沟通的媒介不同,导致我们无法相互交流。但是,埃隆马斯克&…

App原型设计规范

一、界面尺寸 1.ios分辨率 2.android界面尺寸 ① 安卓分辨率 ②常见安卓手机分辨率及尺寸 一般情况下大家在设计app端原型的时候,由于现在ios和安卓慢慢在趋向一致,所以基本上都只会设计一套原型,尺寸方面一般都是按照iphone6的750*1344(2倍…

Django 数据备份dumpdata 踩的坑

项目背景: 项目使用的是sqlite数据库,要求备份除了网络表之外的所有数据 实施方案: python3 manage.py dumpdata --exclude network.TRoute --indent 2 --format json > aq3.json 方案操作结果是: 查看aq3.json如下&#xff…

一文详解GCC7、CUDA 11.2、CUDNN部署

在部署之前,需要了解下python-tensorflow-cuDNN-CUDA版本对应关系,以便能够完全兼容下文以此版本为例部署gcc-7.3.1gpu driver-460.106.00cuda-11.2cudnn-8.1.1一.gcc部署1.安装[rootgpu ~]# yum -y install centos-release-scl [rootgpu ~]# yum install devtoolse…

《收获,不止Oracle》索引细化

1.索引知识图框 2.索引探秘 2.1 BTREE索引 索引是建在表的具体列上的,其存在的目的是让表的查询变得更快,效率更高。表记录丢失关乎生死,而索引丢失只需重建即可。 索引却是数据库学习中最实用的技术之一。谁能深刻地理解和掌握索引的知识&…

Spring gateway websocket自定义负载均衡

业务需求 公司IM服务主要基于netty实现websocket,为保证在线用户channel通道畅通故一直使用单机运行。现由于公司业务增加需要增加IM集群,由于channel通道不能缓存,故急需一套可以完整兼容之前功能的方案。 技术选型 1、采用spring websocke…

Bonree ONE荣获信通院“2022IT新治理年度明星产品”

今日,由信通院主办的“GOLFIT新治理领导力论坛”正式召开,论坛上公布了2022IT新治理年度评选活动的结果,博睿数据一体化智能可观测平台Bonree ONE凭借卓越的产品力以及优秀的用户体验,从一众产品中脱颖而出,获得“2022…

spring 事务@Transantional 失效及解决方案和总结

1、线程中方法,事务会失效 2、线程中方法,事务会失效。即使在线程方法上增加Transactional注解 3、事务正常回滚,A方法调用B的普通方法 4、事务正常回滚。A方法调用B的private普通方法 6、会抛出NullPointerException异常。 Methods ann…