前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TypeScript学习笔记

TypeScript学习笔记

作者头像
Tiffany_c4df
发布于 2019-12-04 03:55:41
发布于 2019-12-04 03:55:41
66400
代码可运行
举报
文章被收录于专栏:前端小课堂前端小课堂
运行总次数:0
代码可运行

TypeScript学习笔记 author: @TiffanysBear

1、类型注解 2、接口interface:使用interface可以申明一个类型 3、类

  • 创建类时,在构造函数的参数上使用public等同于创建了同名的成员变量。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Student {
    fullName: string;
    constructor(public firstName, public middleInitial, public lastName) {
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
}
// 编译后
var Student = /** @class */ (function () {
    function Student(firstName, middleInitial, lastName) {
        this.firstName = firstName;
        this.middleInitial = middleInitial;
        this.lastName = lastName;
        this.fullName = firstName + " " + middleInitial + " " + lastName;
    }
    return Student;
}());

4、基本类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// bool
let isDone: boolean = false;

// number
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;

// string
let name: string = "bob";

// array
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];

5、元组 Tuple

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

// Declare a tuple type
let x: [string, number];
// Initialize it
x = ['hello', 10]; // OK
// Initialize it incorrectly
x = [10, 'hello']; // Error

6、枚举

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
enum Color {Red, Green, Blue}
let c: Color = Color.Green;

7、Any 任意类型的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

在对现有代码进行改写的时候,any类型是十分有用的,它允许你在编译时可选择地包含或移除类型检查。 你可能认为 Object有相似的作用,就像它在其它语言中那样。 但是 Object类型的变量只是允许你给它赋任意值 - 但是却不能够在它上面调用任意的方法,即便它真的有这些方法。 当你只知道一部分数据的类型时,any类型也是有用的。 比如,你有一个数组,它包含了不同的类型的数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

let list: any[] = [1, true, "free"];
list[1] = 100;

8、void 没有任何类型 当一个函数没有返回值时,你通常会见到其返回值类型是 void:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function warnUser(): void {
    console.log("This is my warning message");
}

声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let unusable: void = undefined;

9、Null 和 Undefined TypeScript里,undefined和null两者各自有自己的类型分别叫做undefined和null。 和 void相似,它们的本身的类型用处不是很大:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;

默认情况下null和undefined是所有类型的子类型。 就是说你可以把 null和undefined赋值给number类型的变量。

然而,当你指定了 --strictNullChecks 标记,nullundefined 只能赋值给void和它们各自。 这能避免 很多常见的问题。 也许在某处你想传入一个 string或null或undefined,你可以使用联合类型string | null | undefined

10、Never never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。 never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
    return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
    while (true) {
    }
}

11、object object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare function create(o: object | null): void;

create({ prop: 0 }); // OK
create(null); // OK

create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error

12、可选属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface SquareConfig {
  color?: string;
  width?: number;
}

13、只读属性 一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface Point {
    readonly x: number;
    readonly y: number;
}

14、函数类型 为了使用接口表示函数类型,我们需要给接口定义一个调用签名。 它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface SearchFunc {
  (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
  let result = source.search(subString);
  return result > -1;
}

// 或者
let mySearch: SearchFunc;
mySearch = function(src: string, sub: string): boolean {
  let result = src.search(sub);
  return result > -1;
}

15、联合类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function padLeft(value: string, padding: string | number) {
    // ...
}

16、交叉类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function extend<T, U>(first: T, second: U): T & U {
    let result = <T & U>{};
    for (let id in first) {
        (<any>result)[id] = (<any>first)[id];
    }
    for (let id in second) {
        if (!result.hasOwnProperty(id)) {
            (<any>result)[id] = (<any>second)[id];
        }
    }
    return result;
}

17、可以为null的类型 默认情况下,类型检查器认为 null与 undefined可以赋值给任何类型。 nullundefined 是所有其它类型的一个有效值。

--strictNullChecks 标记可以解决此错误:当你声明一个变量时,它不会自动地包含 null或 undefined。

18、接口 Interface vs. 类型别名 type

  • 接口创建了一个新的名字,可以在其它任何地方使用。 类型别名并不创建新名字—比如,错误信息就不会使用别名。 在下面的示例代码里,在编译器中将鼠标悬停在 interfaced上,显示它返回的是 Interface,但悬停在 aliased上时,显示的却是对象字面量类型。
  • 类型别名不能被 extends和 implements(自己也不能 extends和 implements其它类型)
  • 如果你无法通过接口来描述一个类型并且需要使用联合类型或元组类型,这时通常会使用类型别名

19、字符串字面量类型 字符串字面量类型允许你指定字符串必须的固定值。 在实际应用中,字符串字面量类型可以与联合类型,类型保护和类型别名很好的配合。 通过结合使用这些特性,你可以实现类似枚举类型的字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type Easing = "ease-in" | "ease-out" | "ease-in-out";
class UIElement {
    animate(dx: number, dy: number, easing: Easing) {
        if (easing === "ease-in") {
            // ...
        }
        else if (easing === "ease-out") {
        }
        else if (easing === "ease-in-out") {
        }
        else {
            // error! should not pass null or undefined.
        }
    }
}

let button = new UIElement();
button.animate(0, 0, "ease-in");
button.animate(0, 0, "uneasy"); // error: "uneasy" is not allowed here

字符串字面量类型还可以用于区分函数重载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function createElement(tagName: "img"): HTMLImageElement;
function createElement(tagName: "input"): HTMLInputElement;
// ... more overloads ...
function createElement(tagName: string): Element {
    // ... code goes here ...
}
代码语言:javascript
代码运行次数:0
运行
复制
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【目标跟踪】多目标跟踪sort (python 代码)
读书猿
2024/02/05
6030
【目标跟踪】多目标跟踪sort (python 代码)
【目标跟踪】多目标跟踪测距
读书猿
2024/02/05
3870
【目标跟踪】多目标跟踪测距
SORT 多目标跟踪算法笔记[通俗易懂]
SORT 算法以检测作为关键组件,传播目标状态到未来帧中,将当前检测与现有目标相关联,并管理跟踪目标的生命周期。
全栈程序员站长
2022/11/01
3.6K0
SORT 多目标跟踪算法笔记[通俗易懂]
Deep SORT多目标跟踪算法代码解析
Deep SORT是多目标跟踪(Multi-Object Tracking)中常用到的一种算法,是一个Detection Based Tracking的方法。这个算法工业界关注度非常高,在知乎上有很多文章都是使用了Deep SORT进行工程部署。笔者将参考前辈的博客,结合自己的实践(理论&代码)对Deep SORT算法进行代码层面的解析。
BBuf
2020/04/21
5.2K0
Deep SORT多目标跟踪算法代码解析
《Aidlux智慧社区AI实战训练营》大作业总结及心得
https://mp.weixin.qq.com/s/ASnaFA7D4jfHWoO_IqQ6aQ
用户10149871
2023/02/26
5970
【项目实践】从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)
首先要说明一点,现在多目标跟踪算法的效果,与目标检测的结果息息相关,因为主流的多目标跟踪算法都是TBD(Tracking-by-Detecton)策略,SORT同样使用的是TBD,也就是说先检测,再跟踪。这也是跟踪领域的主流方法。所以,检测器的好坏将决定跟踪的效果。
公众号机器学习与AI生成创作
2020/07/15
1.4K0
【项目实践】从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附注释项目代码)
目标检测基本概念与性能评价指标计算
不同的问题和不同的数据集都会有不同的模型评价指标,比如分类问题,数据集类别平衡的情况下可以使用准确率作为评价指标,但是现实中的数据集几乎都是类别不平衡的,所以一般都是采用 AP 作为评价指标,分别计算每个类别的 AP,再计算mAP。
嵌入式视觉
2022/09/05
9500
目标检测基本概念与性能评价指标计算
基于热成像的巡检及AidLux方案实现
本方案需要完成前置模型转换工作采取的方案为:pt—onnx—tflite(tflite为了完成部署到移动端)
用户10559524
2023/05/10
3460
COCO 数据集目标检测等相关评测指标
[3] - APAPAP (所有 10 个 IoU 阈值和全部 80 个类别的平均值) 作为最终 COCO竞赛胜者的标准. 在考虑目标检测器再 COCO 上的性能时,这是单个最重要的评价度量指标.
AIHGF
2019/02/27
14.8K0
【pytorch-ssd目标检测】验证自己创建的数据集
制作类似pascal voc格式的目标检测数据集:https://www.cnblogs.com/xiximayou/p/12546061.html
西西嘛呦
2020/08/26
1K0
【pytorch-ssd目标检测】验证自己创建的数据集
基于Aidlux平台的工业视觉缺陷检测
工业视觉缺陷检测是一种利用计算机视觉技术,对工业制品进行自动化检测,以识别和分类可能存在的缺陷的方法。它是现代工业生产中的重要环节,可以大大提高生产效率,降低产品缺陷率,提高产品质量。
用户10686717
2023/09/08
3800
项目实践 | 行人跟踪与摔倒检测报警
本项目的目的是为了给大家提供跟多的实战思路,抛砖引玉为大家提供一个案例,也希望读者可以根据该方法实现更多的思想与想法,也希望读者可以改进该项目种提到的方法,比如改进其中的行人检测器、跟踪方法、行为识别算法等等。
OpenCV学堂
2021/02/22
1K0
项目实践 | 行人跟踪与摔倒检测报警
目标检测中AP和mAP计算详解(代码全解)
✔️ 准确率=预测正确的样本数/所有样本数,即预测正确的样本比例(包括预测正确的正样本和预测正确的负样本,不过在目标检测领域,没有预测正确的负样本这一说法,所以目标检测里面没有用Accuracy的)。
小草AI
2019/11/01
6.3K0
目标检测中AP和mAP计算详解(代码全解)
目标检测4: Detection基础之mAP
前面目标检测1: 目标检测20年综述之(一)和目标检测2: 目标检测20年综述之(二)让大家对目标检测有个大概的认识,机器学习评价指标合辑(Precision/Recall/F1score/P-R曲线/ROC曲线/AUC)介绍了基础的评价指标,如Precision、Recall、F score等概念,目标检测3: Detection基础之IoU中介绍了目标检测的评价指标IoU,接下来我们介绍目标检测最重要的评价指标mAP。
枫桦
2022/08/02
1K0
目标检测4: Detection基础之mAP
ByteTrack注释详解
最近有用到多目标追踪 Multi Object Tracking 的东西,看过了经典的 DeepSort 源码之后觉得 tracking 挺有意思的也挺有挑战的,ByteTrack 是多目标追踪里面一个相对比较新的的追踪器 (ECCV2022),也比较简单,这里就对源码做一些注释,仅供日后复习参考。
棒棒鸡不棒
2022/09/08
3.9K0
Github 项目- 基于YOLOV3 和 DeepSort 的实时多人追踪
原文:Github 项目- 基于YOLOV3 和 DeepSort 的实时多人追踪 - AIUAI
AIHGF
2019/02/27
5.7K0
Github 项目- 基于YOLOV3 和 DeepSort 的实时多人追踪
Yolov8 源码解析(四十二)
ApacheCN_飞龙
2024/09/13
3980
目标检测mAP计算方式
目标检测中常见的mAP计算说起来比较麻烦,所以结合VOC的计算代码进行一次详细的解析。
泽霖
2023/11/26
5180
目标检测模型的评价标准-AP与mAP
为了了解模型的泛化能力,即判断模型的好坏,我们需要用某个指标来衡量,有了评价指标,就可以对比不同模型的优劣,并通过这个指标来进一步调参优化模型。对于分类和回归两类监督模型,分别有各自的评判标准。
h3110_w0r1d
2025/02/04
1980
使用OpenCV和YOLOv8制作目标检测器(附源码)
YOLO(You Only Look Once)是由Joseph Redmon和Ali开发的一种对象检测和图像分割模型。
小F
2023/09/19
3.1K1
使用OpenCV和YOLOv8制作目标检测器(附源码)
推荐阅读
相关推荐
【目标跟踪】多目标跟踪sort (python 代码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档