对象和接口-1:对象类型

简介: 本实验将介绍TypeScript中的对象类的基本语法

对象和接口-1:对象类型

1. 创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息


2. 实验环境操作指南

在本系列实验中,有两种方法可以进行操作。一种是控制台方式,另一种是远程桌面的方式。接下来我们分别介绍这两种操作方式。

控制台方式

使用控制台方式操作实验,上手比较简单,对网络带宽的要求也不高。但是在编辑代码时,需要使用Vim工具进行文本编辑。对于初学者来说使用Vim工具需要熟悉其操作模式。

进入控制台环境

资源创建成功后,我们在右侧选择切换到Web Terminal

切换到dev用户

本次实验的开发环境部署在dev用户的~/web目录中。因此我们执行这两条命令即可进入实验环境

su dev
cd ~/web

Vim工具的用法

vim是一个命令行下的文本编译器。使用vim编辑文件时。我们只需要通过快捷键,而不需要鼠标就可以对文本文件进行编辑。但是这种文本编辑器的用法和常见的图形界面编辑器使用习惯差别较大。接下来我们简单介绍vim的使用。

3.1 进入Vim

在命令行中输入vim即可进入操作界面,这时的Vim没有打开任何文件。

vim

3.2 Vim的三种模式

和普通编译器不同的是,Vim包含了三种操作模式。分别是命令模式编辑模式末行模式。接下来我们来简单介绍一下三种模式的用法。

3.3 命令模式

在刚进入界面的时候,vim默认状态为命令模式。这种模式下,无法编辑文件,键盘输入也不会在屏幕上有任何显示,这种情况往往会让使用者感到困惑。这时候我们可以输入大写的ZZ,即可退出Vim。

3.4 编辑模式

我们继续输入vim回到编辑器。在命令模式下我们按下小写的i。此时我们会发现下部的提示已经变成了插入。这表示vim已经进入了编辑模式。

在编辑模式下我们就可以像正常的编辑器一样编辑文件。此处我们输入hello world

在编辑完成之后,如果我们想退回命令模式,只需要按ECS键即可。按下该按钮之后我们会发现下部的插入提示消失了,这就表示vim回到了命令模式。

3.5 末行模式

回到命令模式之后,我们按下:键,这时下部的提示会变成:,这就表示vim进入了末行模式。在末行模式下,我们同样使用快捷命令操作vim,但是和命令模式不同的是,末行模式中输入的命令会显示的屏幕的最后一行。

接下来我们继续输入w demo.txt并按回车。会提示显示为如下内容。表示上面的内容已经保存到了demo.txt中。

最后我们按:q,该命令也可以退出vim。

4. 编辑index.js文件

4.1 创建新文件

当我们希望编辑特定文件时,我们可以输入vim 文件名。这时候在下部会看到"index.ts" [新]。表示vim自动创建了新文件。

vim index.ts

4.2 复制粘贴

在编辑模式下,vim同样可以使用ctrl+v进行粘贴。我们按i进入编辑模式之后,将下列内容粘贴到vim中。

//vim编辑模式和命令模式的常用命令:
//在编辑模式中:可以使用 上 下 左 右 按键移动光标
//在命令模式中:可以使用 h j k l 命令移动光标
//在编辑模式中:可以使用退格或者DEL键删除字符
//在命令模式中:可以使用 x 命令删除字符
//在命令模式中:可以使用 dd 命令删除整行文字(谨慎使用!)
//在命令模式中:可以使用 ggdG 命令删除全部文字(谨慎使用!)
//在命令模式中:可以使用 u 命令撤销操作
//在命令模式中:可以使用 ctrl + r 命令重做操作。

4.3 文件内容的查找

在命令模式下,除了按:命令之外,还可以使用/命令进入末行模式,通过/进入末行模式之后,输入相关的内容即可进行全文检索。我们在命令模式下输入/dd

光标就会移动到相关字符上。

4.3 文件的保存和放弃

当我们编辑完成之后,可以在命令模式中通过ZZ命令直接保存并退出编辑器,也可以通过在末行模式中通过:w单独保存文件。如果我们希望通过末行模式保存并退出,可以使用:wq

但是需要注意的时,如果文件在修改之后没有保存,是无法通过:q退出的。如果编辑过的文件是只读属性也无法通过ZZ退出。这时我们就可以使用:q!命令放弃所有的编辑内容,强制退出vim。

远程桌面方式

使用远程桌面方式进行实验是,可以使用VS Code编译器进行代码的编写和操作,相对控制台方式更加的直观。但是这种方式对网络带宽的要求比较高。

进入网页环境

1.1 进入远程桌面

资源创建成功后,我们在右侧选择切换到远程桌面

1.2 启动浏览器

在远程桌面页面中,点击Chromium网页浏览器

登录RAM用户

2.1 打开网页

浏览器启动后会默认打开阿里云的RAM用户登录页。在登录页面中我们点击下一步按钮。

2.2 获取密码

接下来我们需要输入RAM用户的密码。密码显示在实验控制台左侧,我们点击子用户密码右侧的复制按钮。

复制完成后,我们在用户密码框中按Ctrl + V 复制密码,然后点击登录按钮

进入ECS的远程连接。

3.1 进入ECS控制台

登录成功后,页面跳转到控制台,我们在控制台的搜索框中输入ECS,然后点击云服务器ECS进入云服务器控制台。

3.2 进入远程连接界面

在ECS控制台中,我们找到实验创建的ECS,点击右侧的远程连接按钮。

3.3 选择VNC远程连接

在远程连接中选择通过VNC远程连接中的立即登录如果没有显示该选项,则可点击展开其他登录方式按钮。

登录VNC远程连接

4.1 初始化VNC密码

初次登录VNC远程连接时需要先设置VNC密码。点击重置VNC密码按钮。

输入两次新的VNC密码,并点击确认

4.2 登录VNC

VNC密码设置成功后,输入密码并点击确认。

4.4 进入图形界面

VNC登录成功后会看到实验ECS的登录界面,在登陆界面中我们点击DEV用户图标

4.5 在图形界面中登录

在密码框中输入默认登录密码Dev12345。即可进入图形实验环境

使用VS Code编辑器

登录图形实验环境之后,接下来我们来启动VS Code 编辑器。

5.1 进入应用程序列表

首先我们点击界面的下方的显示应用程序按钮。

5.2 启动VS Code

在应用程序列表中选择最后一页

然后点击VS Code应用图标

5.3 选择文件

在VS Code 编译器中,左边区域为文件列表,可以选择要编辑的文件

5.4 编辑文件

在VS Code中,右上区域为文件编辑区,可以进行文件内容编辑

5.5 操作终端

在右下区域的终端选项卡,为控制台区域,可以进行命令输入执行


3. 对象的语法

在原生JavaScript中,绝大多数元素都作为对象进行处理。在对象类型中可以包含若干有名字的属性,和数组相比对象类型的可读性要好很多。因此对象是JavaScript中最基础和重要的元素。本节实验我们将介绍对象类型的用法。

  1. 对象的定义

TypeScript中的对象类型为object,但是直接使用object定义的对象不能存储任何属性。因此在实际使用时我们会使用另一种方法,也就通过{}语法来定义对象。这种方式需要在定义时明确对象内的所有属性的名称和类型。对象类型定义后,初始化时需要提供对象内元素的具体值。我们修改index.ts文件为如下内容。

var obj:{a:string};
obj = {a:"Hello World"};
console.log(obj);

终端选项卡中输入如下内容,编译并查看。此处我们使用linux中的&&关键字将两条命令放在一行执行

tsc && node index.js

  1. 属性访问

当我们需要读取或者修改对象内部的元素值的时候,我们可以使用对象名.属性名的语法。我们修改index.ts文件为如下内容。

var obj: { a: string };
obj = { a: "Hello World" };
console.log(obj);
obj.a = "Hello Alibaba"
console.log(obj);
console.log(obj.a);

终端选项卡中输入如下内容,编译并查看。

tsc && node index.js

  1. 函数属性

在TypeScript中所有的元素都可以看作对象,自然也包括函数元素。这就意味者函数不但可以作为变量,同样也可以作为对象的属性。

当函数做为对象的属性时,可以使用普通函数和Lambad表达式两种语法定义属性的类型。普通函数类型的定义语法为标准函数定义去掉function关键字。Lambad表达式的语法和定义函数类型一致。

当我们使用函数属性时,除了使用.语法读取和修改之外,还可以使用对象元素.函数属性()的方式调用函数。需要注意的时,对象在初始化的时候,函数变量和普通变量一样都需要进行初始化赋值。我们修改index.ts文件为如下内容。

var u: {
    user: string;
    login(password: string): void;
    login: (password: string) => void;
}
u = {
    user: "Aliyun",
    login: function (password: string) {
        console.log("password:" + password);
    }
};
u.login("passwd");

终端选项卡输入如下命令编译并查看。

tsc && node index.js


4. 对象、函数、this

在TypeScript的中有一个特殊的对象变量叫做this。在实际开发中我们会经常使用这个变量。但是这个变量的使用逻辑同时涉及到了对象和函数类型。在本小节我们就来介绍一下this对象的用法和逻辑。

需要注意的是在前端网页运行环境和nodejs运行环境中,this对象的定义逻辑并不完全相同,在本实验中我们以nodejs运行环境为主来进行学习。

  1. 对象函数中的this

首先我们来看一下this对象的基本用法,我们定义一个对象,并在其中包含一个函数属性。在该函数属性中,我们就可以使用this对象。这时候的this对象表示的就是函数所在的对象。

当我们使用this对象的时候,同样可以使用.语法来访问其中的属性和函数方法。我们修改index.ts文件为如下内容。

var u: {
    user: string;
    login(password: string): void;
    sayHello: () => string;
}
u = {
    user: "Aliyun",
    login: function (password: string) {
        console.log("this:", this);
        console.log("user:" + this.user + "password:" + password);
        console.log("sayHello:" + this.sayHello());
    },
    sayHello: function () {
        return "hello"
    }
};
u.login("passwd");

终端选项卡中输入如下内容,编译并查看。

tsc && node index.js

  1. this的指向

在上面的步骤中我们可知,使用对象元素.函数名的方式调用函数时,this变量为对象元素本身。但是当我们使用一个函数变量保存对象中的函数属性。然后通过函数变量调用函数时,我们会发现这时候的this变量的为undefined

这是由于在nodejs的函数中,this变量的指向实际上就是函数调用时.前面的对象。如果不是使用.语法进行的函数调用,就无法获得为this变量赋值。我们修改index.ts文件为如下内容。

var u: {
    user: string;
    login(password: string): void;
}
u = {
    user: "Aliyun", login: function (password: string) {
        console.log("this:", this);
  }
};
var l = u.login;
l("passwd");

终端选项卡中输入如下内容,编译并查看。

tsc && node index.js

  1. lambda表达式和this

在上一个小节的学习中我们了解到,对象中的函数属性可以通过标准function语法,或者lambda表达式方法定义。同时我们可以使用两种方法中的任意一种初始化属性。

但是需要注意的时,无论使用哪种方法定义函数属性,只有使用了标准function语法初始化的函数中才可以使用this。在lambda表达式中this并不生效。我们修改index.ts文件为如下内容。

var u: {
    user: string;
    login: (password: string) => void;
}
u = {
    user: "Aliyun", login: function (password: string) {
        console.log("user:" + this.user + "password:" + password);
    }
};
u.login("passwd");
u = {
    user: "Aliyun", login: (password: string) => {
        console.log("user:" + this.user + "password:" + password);
    }
};
u.login("passwd");

终端选项卡中输入如下内容,编译并查看。

tsc


5. 复杂属性的用法

  1. 对象中复杂属性

对象中的属性类型不但可以包括numberstringboolean函数等基本类型,同样可以包括数组,元组甚至另一个对象。我们修改index.ts文件为如下内容。

var obj: {
    person: { name: string, age: number, male: boolean },
    score: number[]
};
obj = {
    person: { name: "alibaba", age: 20, male: false },
    score: [84.5, 90.2, 75.8]
};
console.log(obj);

终端选项卡输入如下命令编译并查看。

tsc && node index.js

  1. 复杂类型选取

在访问复杂类型时,我们可根据对象的类型,将.[]等关键字组合使用。我们修改index.ts文件为如下内容。

var obj: {
    person: { name: string, age: number, male: boolean },
    score: number[]
};
obj = {
    person: { name: "alibaba", age: 20, male: false },
    score: [84.5, 90.2, 75.8]
};
obj.person.name = "ALIBABA"
obj.score.push(100);
console.log(obj.person.name);
console.log(obj.score[3]);
console.log(obj);

终端选项卡输入如下命令编译并查看。

tsc && node index.js

  1. 对象的下标访问方式

除了对象名.属性名语法之外,对象类型还支持和数字类似的对象名["属性名"]语法形式,相对于.语法,这种语法的灵活性会更强。我们修改index.ts文件为如下内容。

var obj: {
    person: { name: string, age: number, male: boolean },
    score: number[]
};
obj = {
    person: { name: "alibaba", age: 20, male: false },
    score: [84.5, 90.2, 75.8]
};
console.log(obj["person"]["name"])
console.log(obj["score"][0])

终端选项卡输入如下命令编译并查看,

tsc && node index.js


6. 特殊属性的用法

TypeScript对象的语法中还包含了一些特殊属性的定义方法。本小节中我们先来学习只读属性和可选属性的语法和语法。

  1. 对象中的只读属性

在实际使用对象元素时,经常会遇到如下情况,我们需要将对象中的某些属性设定为在初始化之后需要保持不变,这些属性一旦被误修改会造成业务逻辑的错误,比如用户ID。

这时候我们就可以使用readonly关键字将这种属性声明为只读,TypeScript的编译器会检查并禁止只读属性在初始化之后的赋值操作,保证只读的属性在初始化之后的不可改变。我们修改index.ts文件为如下内容。

var obj: {
    readonly id: string,
    name: string, age: number, male: boolean
};
obj = { id: "ID0001", name: "alibaba", age: 20, male: false };
obj.id = "ID0002";

终端选项卡输入如下命令编译并查看。

tsc

  1. 只读复杂属性

对于普通的只读属性来说,属性在初始化之后就无法修改。但是对于复杂类型的属性来说。虽然属性在初始化之后无法修改。但是对象属性的属性并不受readonly影响。也就是我们可以修改只读属性的属性和内容。我们修改index.ts文件为如下内容。

var user: {
    readonly id: number[],
    readonly name: { first: string, last: string }
};
user = {
    id: [2022],
    name: { first: "Ali", last: "yun" }
};
console.log(user)
user.name.first = "阿里云";
user.id.push(2023);
console.log(user);

终端选项卡输入如下命令编译并查看。

tsc && node index.js

  1. 可选属性

除了只读属性之外,我们在实际开发过程中还会遇到另一种情况,有的属性值在某些情况下并不需要,或者没有意义。除了使用类型 | undefined的联合类型之外,也可以使用?关键字来标识可选属性。我们修改index.ts文件为如下内容。

var user1, user2: {
    name: string,
    passwd?: string
};
user1 = { name: "ALIYUN"};
console.log(user1)
user2 = { name: "ALIYUN", passwd: "PASSWORD" };
console.log(user2)

终端选项卡输入如下命令编译并查看。会发现passwd是否赋值都不影响对象的初始化。

tsc && node index.js

实验链接:https://developer.aliyun.com/adc/scenario/2441cd7370cb44eba190e577f4aa779a

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
监控 前端开发 JavaScript
React + TypeScript 最佳实践:构建高可维护前端项目
本文系统梳理了 React + TypeScript 高可维护项目的最佳实践,涵盖项目结构、类型设计、组件模式、自定义 Hook、状态管理、API 服务、性能优化及测试部署等全链路方案,助力构建高质量企业级前端应用。
659 4
|
2月前
|
人工智能 Linux API
OpenClaw刷屏全网:AI智能体落地,易用性才是开发者与企业的核心诉求
本文剖析火爆社区的AI智能体框架OpenClaw(“龙虾”):肯定其开源灵活、支持多工具联动等创新,更直指其云上部署门槛高、插件生态弱、场景适配窄三大短板。对比提出阿里云深度适配的玄晶引擎——一键部署、视窗操作、全场景覆盖、免插件开发,真正实现低门槛、高可用的AI智能体云上落地。
615 5
|
4月前
|
前端开发 CDN
微信小游戏的开发费用
微信小游戏开发费用因美术、玩法等差异大,轻量级3-8万,精品中度10-35万,重度游戏达50万以上。另需考虑软著、版号、服务器及买量等硬成本,运营投入常超开发。2026年混合变现与首发激励成新趋势。#微信游戏 #游戏外包
|
6月前
|
人工智能 缓存 语音技术
基于Rokid CXR-M SDK实现AR智能助手应用:让AI大模型走进AR眼镜
本文记录使用Rokid CXR-M SDK开发AR AI助手的全过程,涵盖SDK集成、语音识别、AI对接、结果推送等核心功能,分享实际开发中的技术选型、架构设计与踩坑经验,实现解放双手的实时语音问答体验。
862 6
基于Rokid CXR-M SDK实现AR智能助手应用:让AI大模型走进AR眼镜
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
AI大模型面试宝典
【AI大模型面试宝典】聚焦Transformer核心架构,拆解自注意力、多头机制、位置编码等高频考点,配代码实现与面试真题解析,助你快速掌握大模型面试关键知识点,无痛拿下offer!
296 0
|
机器学习/深度学习 人工智能 算法
PeptideBERT:基于Transformer用于肽性质预测的语言模型
本文介绍了PeptideBERT模型及其在昇腾设备上的部署方法。PeptideBERT是一种基于Transformer架构的蛋白质语言模型,通过微调预训练模型ProtBERT,可预测肽的溶血性、溶解性和抗非特异性吸附性等关键性质。其输入表示包括词嵌入、物理化学属性编码和位置编码,并采用多头自注意力机制捕捉序列依赖关系。
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
715 79
|
10月前
|
机器学习/深度学习 人工智能 负载均衡
大语言模型计算成本高,MoE如何有效降低成本?
本文由AI产品专家三桥君深入探讨混合专家(MoE)技术在大语言模型中的应用。MoE通过稀疏激活机制,仅激活与当前任务相关的专家子网络,显著降低计算成本(如LLaMA 4仅激活2-3个专家)。三桥君解析了MoE的核心原理,包括路由机制(动态选择专家)和共享专家(提升泛化能力)等关键技术,并对比传统Transformer模型。MoE的工作流程类比专业团队协作,支持高效推理和千亿级参数扩展。该技术重新定义AI模型标准,为突破性能瓶颈提供新思路。
614 0
|
传感器 人工智能 定位技术
智能手表续航太短?聊聊可穿戴设备的能耗管理黑科技
智能手表续航太短?聊聊可穿戴设备的能耗管理黑科技
767 11
|
SQL 数据可视化 数据挖掘
Quick BI 评测报告
本文详细记录了对Quick BI的评测过程,涵盖从申请试用账号、准备测试数据到数据可视化分析及智能化体验的全流程。Quick BI作为一款领先的BI工具,支持通过拖拽等直观操作简化数据分析,并提供智能问数和智能搭建等功能提升用户体验。然而,在实际使用中也暴露出一些问题:试用申请流程繁琐、数据上传准确性待提高、部分功能需优化(如撤回机制缺失)以及发布前测试不足导致体验欠佳。建议增强数据处理能力、提升上传效率与准确率,并完善用户引导教程。总体而言,Quick BI虽具备强大功能,但仍需持续改进以更好地满足企业需求。
443 3

热门文章

最新文章