当前位置: 首页 > news >正文

TS总结10、ts的 class 类型(配置项strictPropertyInitialization、非空断言)

一、简介

1.类(class)是面向对象编程的基本构件,封装了属性和方法

1.1、属性的类型:类的属性可以在顶层声明,也可以在构造方法内部声明,如果不给出类型;TypeScript 会认为xy的类型都是any;如果声明时给出初值,可以不写类型,TypeScript 会自行推断属性的类型;
class Point {x:number;y:number;
}

 1.1.1.TypeScript 有一个配置项strictPropertyInitialization,只要打开(默认是打开的),就会检查属性是否设置了初值,如果没有就报错

// 打开 strictPropertyInitialization
class Point {x: number; // 报错y: number; // 报错
}// 如果类的顶层属性不赋值,就会报错。如果不希望出现报错,可以使用非空断言。
class Point {x!: number;y!: number;
}
// 属性x和y没有初值,但是属性名后面添加了感叹号,表示这两个属性肯定不会为空,所以TypeScript
//就不报错了
1.2、readonly 修饰符:属性名前面加上 readonly 修饰符,就表示该属性是只读的。实例对象不能修改这个属性(构造方法内部设置只读属性的初值,修改只读属性的值都是可以的)

1.2.1. readonly 属性的初始值,可以写在顶层属性,也可以写在构造方法里面

// 构造方法内部设置只读属性的初值,这是可以的
class A {readonly id:string; constructor() {this.id = 'bar'; // 正确}
}class A {readonly id:string = 'foo';constructor() {this.id = 'bar'; // 正确}
}
// 构造方法修改只读属性的值也是可以的。或者说,如果两个地方都设置了只读属性的值,以构造方法
//为准。在其他方法修改只读属性都会报错
1.3、方法的类型:类的方法就是普通函数,类型声明方式与函数一致
class Point {x:number;y:number;constructor(x:number, y:number) {this.x = x;this.y = y;}add(point:Point) {return new Point(this.x + point.x,this.y + point.y);}
}
// 构造方法constructor()和普通方法add()都注明了参数类型,但是省略了返回值类型,因为 
//TypeScript 可以自己推断出来

1.3.1.类的方法跟普通函数一样,可以使用参数默认值,以及函数重载。

class Point {x: number;y: number;constructor(x = 0, y = 0) {this.x = x;this.y = y;}
}// 下面是函数重载的例子
class Point {constructor(x:number, y:string);constructor(s:string);constructor(xs:number|string, y?:string) {// ...}
}

1.3.2.构造方法不能声明返回值类型,否则报错,因为它总是返回实例对象

class B {constructor():object { // 报错:构造方法声明了返回值类型object,导致报错// ...}
}
1.4、存取器方法:取值器用来读取属性,存值器用来写入属性
class C {_name = '';get name() {return this._name;}set name(value) {this._name = value;}
}
// get name()是取值器,其中get是关键词,name是属性名。外部读取name属性时,实例对象会
//自动调用这个方法,该方法的返回值就是name属性的值// set name()是存值器,其中set是关键词,name是属性名。外部写入name属性时,实例对象会
//自动调用这个方法,并将所赋的值作为函数参数传入

1.4.1.TypeScript 对存取器有以下规则

a、如果某个属性只有get方法,没有set方法,那么该属性自动成为只读属性

class C {_name = 'foo';get name() {return this._name;}
}const c = new C();
c.name = 'bar'; // 报错

b、TypeScript 5.1 版之前,set方法的参数类型,必须兼容get方法的返回值类型,否则报错。

// TypeScript 5.1 版之前
class C {_name = '';get name():string {  // 报错因为set参数类型必须兼容get返回值类型,在此不兼容return this._name;}set name(value:number) {this._name = String(value);}
}// set方法的参数类型(number|string)兼容get方法的返回值类型(string),这是允许的
class C {_name = '';get name():string {return this._name;}set name(value:number|string) {this._name = String(value);}
}
// TypeScript 5.1 版做出了改变,现在两者可以不兼容

c、get方法与set方法的可访问性必须一致,要么都为公开方法,要么都为私有方法。

1.5、属性索引:类允许定义属性索引

class MyClass {[s:string]: boolean |((s:string) => boolean);get(s:string) {return this[s] as boolean;}
}
// [s:string]表示所有属性名类型为字符串的属性,它们的属性值要么是布尔值,要么是返回
//布尔值的函数

1.5.1.由于类的方法是一种特殊属性(属性值为函数的属性),所以属性索引的类型定义也涵盖了方法如果一个对象同时定义了属性索引和方法,那么前者必须包含后者的类型

class MyClass {[s:string]: boolean;f() { // 报错return true;}
}//上例的属性索引的类型里面不包括方法,导致后面的方法f()定义直接报错;正确的写法如下class MyClass {[s:string]: boolean | (() => boolean);f() {return true;}
}

相关文章:

TS总结10、ts的 class 类型(配置项strictPropertyInitialization、非空断言)

一、简介 1.类(class)是面向对象编程的基本构件,封装了属性和方法 1.1、属性的类型:类的属性可以在顶层声明,也可以在构造方法内部声明,如果不给出类型;TypeScript 会认为x和y的类型都是any&a…...

leetcode 热题 100_找到字符串中所有字母异位词

题解一&#xff1a; 滑动窗口&#xff1a;类似于字符串匹配&#xff0c;但匹配异位词需要包含相同的字母及个数&#xff0c;可以分别用两个数组存储字符串s滑动窗口和字符串p的字母及个数&#xff0c;再用Array.equals()进行比对。对于s.length()<p.length()的情况需要特判。…...

百度百科数据爬取 python 词条数据获取

最近需要补充一些电力名词的解释&#xff0c;尤其是文字相关内容。百度百科上的词条质量有差异&#xff0c;因此我们需要先手工选择一些高质量词条。 假设我们选择了互感器页面中的仪用变压器词条&#xff0c;首先&#xff1a; import requests from bs4 import BeautifulS…...

为不同文章形式选择不同的WordPress文章模板

在写文章的时候选择不同的文章形式&#xff0c;然后打开文章的时候会调用不同文章形式的模板。比如&#xff0c;文章形式为video &#xff0c;就调用single-video.php模板&#xff0c;其它文章形式类似&#xff0c;可以添加多个文章样式。 //为不同文章形式的内容添加不同的si…...

MySQL存储引擎及索引机制

大家好我是咕噜美乐蒂&#xff0c;很高兴又和大家见面了&#xff01; MySQL 存储引擎是指 MySQL 数据库管理系统中负责存储和检索数据的组件&#xff0c;它们可以影响数据的存储方式、事务支持、并发性能等方面。而索引则是用于加速检索数据库表中数据的数据结构。下面我将分别…...

Leetcode算法题

二进制求和 给两个字符串a和b&#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a “11”, b “1” 输出&#xff1a;“100” 示例 2&#xff1a; 输入&#xff1a;a “1010”, b “1011” 输出&#xff1a;“10101” 提示&#xff1a; 1 <…...

数据结构之七大排序

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…...

【MySQL】数据库中常用的函数

目录 聚合函数COUNT()函数的多种用法COUNT(*)COUNT(主键)COUNT(1)COUNT(常量)COUNT(非主键)COUNT(distinct(字段)) COUNT()函数小结 字符函数length(str)函数&#xff1a;获取参数值的字节个数concat(str1,str2,...)函数&#xff1a;字符串拼接upper(str)、lower(str)函数:大小…...

嵌入式面试常见问题(四)

1.在基于Linux的网络套接字编程中&#xff0c;如果需要创建一个IPv4的网络套接字&#xff0c;应该在socket函数中指定domain参数为AF_INET 解析&#xff1a; socket()函数创建套接字 函数原型:int socket(int domain, int type, int protocol); domain&#xff1a;协议簇&…...

用Java在Spring Boot项目中,如何传递来传递一个对象(多个参数??

前言&#xff1a; 在前面我们已经了解到&#xff0c;Spring Boot项目中&#xff0c;可以传递一个参数&#xff0c;或者多个参数&#xff0c;但是&#xff0c;随着参数的增加&#xff0c;咱们总不能每增加一个参数&#xff0c;就重新写一段代码吧&#xff1f;&#xff1f;这样显…...

如何利用ChatGPT搞科研?论文检索、写作、基金润色、数据分析、科研绘图(全球地图、植被图、箱型图、雷达图、玫瑰图、气泡图、森林图等)

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…...

一命通关二分搜索

二分法 简介 和双指针一样&#xff0c;二分法也是一种优化方法&#xff0c;或者说二分法就是双指针的一类。不过&#xff0c;二分法的思想比双指针诞生更早也更广泛&#xff0c;在我们日常生活里也无时不刻在使用二分的思想。 比如我们想回顾某些影片&#xff0c;但是只记得…...

串联所有单词的子串

题目链接 串联所有单词的子串 题目描述 注意点 words[i] 和 s 由小写英文字母组成1 < words.length < 5000可以以 任意顺序 返回答案words中所有字符串长度相同 解答思路 根据滑动窗口哈希表解决本题&#xff0c;哈希表存储words中所有的单词及单词的出现次数&#…...

【会议征稿通知】第四届经济发展与商业文化国际学术会议(ICEDBC2024)

第四届经济发展与商业文化国际学术会议&#xff08;ICEDBC2024&#xff09; The 4th International Conference on Economic Development and Business Culture (ICEDBC 2024) 第四届经济发展与商业文化国际学术会议&#xff08;ICEDBC2024&#xff09;将于2024年6月21-23日在…...

回溯算法套路③排列型回溯+N皇后【基础算法精讲 16】

46 . 全排列 链接 : . - 力扣&#xff08;LeetCode&#xff09; 思路 : 那么怎么确定选了那个数呢? 这里设置一个used表示i选没选过 ; class Solution { public:vector<vector<int>> ans;vector<int> path;void backtrack(vector<int>nums,vect…...

MyBatis-Plus 框架中的自定义元对象处理器

目录 一、代码展示二、代码解读 一、代码展示 package com.minster.yanapi.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.util…...

Node.js_基础知识(fs模块 - 文件操作)

写入 文件操作 流式写入:fs.createWriteStream(path[, options]) 可以减少打开关闭文件的次数适用于:大文件写入、频繁写入参数说明: path:文件路径文件夹操作: 调用mkdir方法:fs.mkdir(./a/b/c, err => {}) 递归创建文件夹:加参数recursive fs.mkdir(./a/b/c, {recu…...

基于C#开发OPC DA客户端——搭建KEPServerEX服务

简介 OPC DA (OLE for Process Control Data Access) 是一种工业自动化领域中的通信协议标准&#xff0c;它定义了应用程序如何访问由OPC服务器提供的过程控制数据。OPC DA标准允许软件应用程序&#xff08;客户端&#xff09;从OPC服务器读取实时数据或向服务器写入数据&…...

让你的函数,返回你需要的“两个值” (函数传址、结构体作为参数传参)

总结&#xff1a;1.结构体完成你的目标 2.指针传参 方法2. void get_a_b(int* a, int* b) { *a 13; *b 14; //通过解引用&#xff0c;找到并修改 } int main() { int a 0; int b 0; get_a_b(&a, &b); //传地址 prin…...

快速上手:在 Android 设备上运行 Pipy

Pipy 作为一个高性能、低资源消耗的可编程代理&#xff0c;通过支持多种计算架构和操作系统&#xff0c;Pipy 确保了它的通用性和灵活性&#xff0c;能够适应不同的部署环境&#xff0c;包括但不限于云环境、边缘计算以及物联网场景。它能够在 X86、ARM64、海光、龙芯、RISC-V …...

阿里云购买域名后解析与申请ssl证书并部署到宝塔

1.购买域名 2.解析域名 我们域名可以拆解为二级域名和三级域名等等 首先进入域名管理 https://dc.console.aliyun.com/next/index?spm5176.12818093_47.overview_recent.2.1c0716d0NpJNj1#/domain-list/all然后我们就拿到了二级域名&#xff0c;但是这个时候需要把二级域名和一…...

实战指南:运用快马平台生成集成homebrew的一键式全栈应用本地部署脚本

最近在折腾一个前后端分离的小项目&#xff0c;后端用Node.jsRedis&#xff0c;前端是React。为了让团队其他成员能快速在本地跑起来&#xff0c;我研究了下如何用Homebrew配合脚本实现一键部署。这里分享下我的实战经验&#xff0c;整个过程在InsCode(快马)平台上测试验证过&a…...

GLM-4.1V-9B-Base效果展示:书法作品字体+内容+文化内涵中文解析

GLM-4.1V-9B-Base效果展示&#xff1a;书法作品字体内容文化内涵中文解析 1. 模型能力概览 GLM-4.1V-9B-Base是智谱开源的视觉多模态理解模型&#xff0c;在中文视觉理解任务上表现出色。不同于常规的图片识别工具&#xff0c;这款模型能够深入理解图像中的文化元素&#xff…...

3步解锁缠论交易:通达信可视化插件让复杂技术分析变简单

3步解锁缠论交易&#xff1a;通达信可视化插件让复杂技术分析变简单 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 缠论作为中国股市技术分析的重要理论体系&#xff0c;其核心价值在于揭示价格波动的内…...

d2s-editor:让暗黑破坏神2存档修改变得高效而简单

d2s-editor&#xff1a;让暗黑破坏神2存档修改变得高效而简单 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 在暗黑破坏神2的冒险旅程中&#xff0c;玩家常常面临三大痛点&#xff1a;反复刷装备消耗大量时间、测试不同职业bui…...

老虎证券季报图解:营收1.76亿美元同比增41% 净利4566万美元

雷递网 雷建平 4月2日老虎证券&#xff08;NASDAQ: TIGR&#xff09;日前发布截至2025年12月31日的财报。财报显示&#xff0c;老虎证券2025年营收为6.12亿美元&#xff0c;较上年同期的3.92亿美元增长56.1%。其中&#xff0c;老虎证券2025年来自佣金收入为2.67亿美元&#xff…...

深入解析Kubernetes中的探针(Probe):Liveness、Readiness与Startup探针实战指南

引言&#xff1a;为什么Kubernetes需要探针&#xff1f;在Kubernetes集群中&#xff0c;我们常常会遇到这样的场景&#xff1a;应用进程还在运行&#xff0c;但内部已陷入死锁&#xff0c;无法处理请求。容器启动了&#xff0c;但依赖的数据库尚未连接成功&#xff0c;此时不应…...

Windows下OpenClaw安装避坑:千问3.5-9B接口配置详解

Windows下OpenClaw安装避坑&#xff1a;千问3.5-9B接口配置详解 1. 为什么选择WindowsOpenClaw组合 作为一个长期在Windows环境下工作的开发者&#xff0c;我一直在寻找能够提升日常效率的自动化工具。直到遇到OpenClaw&#xff0c;这个开源的AI智能体框架彻底改变了我的工作…...

Anthropic Skills 解析

Anthropic Skills 解析 基于 anthropics/skills 仓库的完整技术文档 概述 什么是 Skills&#xff1f; Skills&#xff08;技能&#xff09; 是包含指令、脚本和资源的文件夹&#xff0c;Claude 可以动态加载这些内容以提升在特定任务上的表现。Skills 教会 Claude 如何以可重…...

基于NSGA-II多目标遗传优化算法的考虑风光火储+需求响应+P2G多能源系统多目标优化调度研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...