TypeScript 之类型判断

2023-11-10

在使用 Angular 做项目的时候,对 TypeScript 的类型判断不太熟练,为了方便查找,特意对 TypeScript 的类型判断做了简单梳理。文章只是 TS 官网的内容摘要,没有高深的知识,想要深入学习 TS 还要看官网文档。

基础类型

// 布尔值
let isDone: boolean = false;

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

// 字符串
let name: string = "bob";
name = "smith";

// 数组
let list: number[] = [1, 2, 3];
// 数组泛型
let list: Array<number> = [1, 2, 3];

//元组 Tuple
let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error

// 枚举
enum Color {Red, Green, Blue}
let c: Color = Color.Green;

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

// Void
function warnUser(): void {
    alert("This is my warning message");
}

// Null 和 Undefined
let u: undefined = undefined;
let n: null = null;

// Never
function error(message: string): never {
    throw new Error(message);
}

function fail() {
    return error("Something failed");
}

function infiniteLoop(): never {
    while (true) {
    }
}

类型断言

类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。

let someValue: any = "this is a string";
// “尖括号”语法
let strLength: number = (<string>someValue).length;
// as语法
let strLength: number = (someValue as string).length;

接口

TypeScript 的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在 TypeScript 里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。

interface LabelledValue {
  label: string;
}

// 可选属性
interface SquareConfig {
  color?: string;
  width?: number;
}

// 只读属性
interface Point {
    readonly x: number;
    readonly y: number;
}

// 函数类型
interface SearchFunc {
  (source: string, subString: string): boolean;
}

// 可索引的类型
interface StringArray {
  [index: number]: string;
}

// 类类型
interface ClockInterface {
    currentTime: Date;
}

泛型

我们把这个版本的 identity 函数叫做泛型,因为它可以适用于多个类型。 不同于使用 any,它不会丢失信息,像第一个例子那像保持准确性,传入数值类型并返回数值类型。

function identity<T>(arg: T): T {
    return arg;
}

转载于:https://www.cnblogs.com/nzbin/p/9357247.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript 之类型判断 的相关文章

随机推荐

  • 《计算机视觉中的多视图几何》笔记(2)

    2 Projective Geometry and Transformations of 2D 本章主要介绍本书必要的几何知识与符号 文章目录 2 Projective Geometry and Transformations of 2D
  • 元素和小于等于阈值的正方形的最大边长

    LeetCode 1292 元素和小于等于阈值的正方形的最大边长 给你一个大小为 m x n 的矩阵 mat 和一个整数阈值 threshold 请你返回元素总和小于或等于阈值的正方形区域的最大边长 如果没有这样的正方形区域 则返回 0 示
  • QT 信号发送多个参数

    你可以把多个参数包装为一个类发送 实测是可以的
  • DBUS及常用接口介绍

    1 概述 1 1 DBUS概述 DBUS是一种高级的进程间通信机制 DBUS支持进程间一对一和多对多的对等通信 在多对多的通讯时 需要后台进程的角色去分转消息 当一个进程发消息给另外一个进程时 先发消息到后台进程 再通过后台进程将信息转发到
  • Caused by: java.lang.ClassNotFoundException: org.springframework.core.KotlinDetector

    Exception in thread main java lang IllegalArgumentException Cannot instantiate interface org springframework context App
  • win下从NUMA节点分配内存

    微软官网链接 https docs microsoft com zh cn windows win32 memory allocating memory from a numa node redirectedfrom MSDN 示例代码 d
  • Java高级教程

    Java高级教程 Java11文档 Java数据结构 Java工具包提供了强大的数据结构 在Java中的数据结构主要包括以下几种接口和类 枚举 Enumeration 位集合 BitSet 向量 Vector 栈 Stack 字典 Dict
  • Error loading workspace: You are outside of a module and outside of $GOPATH/src. If you are using mo

    1 描述 如果你使用vsCode去编译 go 项目的时候 出现这个错误 那么并不是你的go moudle 除了问题 同时你会发现执行Run Code也是执行失败的 2 原因 你的工作区默认是项目根目录 但你单开的文件并不是项目根目录 3 解
  • lvgl8.2 img 图片显示

    1 lvgl 图片显示源 为了提供良好的图片显示灵活性 所以显示图像的来源可以是以下三种 代码中的一个变量 一个带有像素颜色数据的 C 数组 存储在外部的文件 比如 SD 卡 带有符号的文本 2 内部图片 对于源码内部图片 将图片转换为图片
  • 前端自动化测试——vue单元测试vue-test-utils

    自动化测试分类 单元测试 单元测试 unit testing 是指对软件中的最小可测试单元进行检查和验证 简单来说 单元就是人为规定的最小的被测功能模块 可能是一个单一函数或方法 一个完整的组件或类 单元测试是最小巧也是最简单的测试 它们通
  • paddlelite编译python版: FIND_PACKAGE called with invalid argument或者fatal: no tag exactly matches 。【已解决】

    报错1 不是这个原因 这个错误不会影像编译 fatal no tag exactly matches 518238f89e84868d666b5cbe6860788934f290d7 tag branch develop commit 51
  • TCP flag注释

    http blog csdn net wisage article details 6049733 三次握手Three way Handshake 一个虚拟连接的建立是通过三次握手来实现的 1 B gt SYN gt A 假如服务器A和客户
  • 【华为OD机试】寻找相同子串(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 若依系统(Ruoyi-Vue)去除redis数据库

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 目的 一 去除redis 配置 二 去除ruoyi framework下RedisConfig的配置 三 在ruoyi common的core redis下新建My
  • 领域驱动设计-Domain-Driven-Design概念

    2021了 你应该要了解DDD了 不然领导和你吹牛你都听不懂 或者你都没法和别人吹牛了 一 Evans DDD 是什么 1 1 背景 2002年 敏捷宣言诞生 时代处于 CS 到 BS 的转换时期 2003年 Eric Evans 发表 l
  • angular?!小白修仙之路……

    一 简介 Angular是一个功能非常完备的前端框架 最早由 Misko Hevery 等人创建 2009 年被Google 公式收购 用于其多款产品 Angular基于TypeScript 通过增强HTML的方式提供一种便捷开发Web应用
  • 【100%通过率 】【华为OD机试 c++ 】不含 101 的数【2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 小明在学习二进制时 发现了一类不含 101的数 也就是 将数字用二进制表示 不能出现 101 现在给定一个整数区间 l r 请问这个区间包含了多
  • 【python 多线程存数据lock(锁)】

    多线程存数据不会数据丢失 案例一 这里只是简单的线程池 import os from concurrent futures import ThreadPoolExecutor from time import perf counter im
  • PTA-计算工资

    计算工资 某公司员工的工资计算方法如下 一周内工作时间不超过40小时 按正常工作时间计酬 超出40小时的工作时间部分 按正常工作时间报酬的1 5倍计酬 员工按进公司时间分为新职工和老职工 进公司不少于5年的员工为老职工 5年以下的为新职工
  • TypeScript 之类型判断

    在使用 Angular 做项目的时候 对 TypeScript 的类型判断不太熟练 为了方便查找 特意对 TypeScript 的类型判断做了简单梳理 文章只是 TS 官网的内容摘要 没有高深的知识 想要深入学习 TS 还要看官网文档 基础