typescript类型检查和原始类型

typescript类型检查和原始类型

类型检查

非严格类型是typescript默认的类型检查模式,在该模式下,类型检查的规则相对轻松,不会对undefined和null值做过多的限制,允许将undefined和null值赋给string类型的变量。进行JavaScript代码到typescript的迁移工作的时候,严格类型检查是一个不错的选择
严格类型检查不允许将undefined和null值赋值给string类型的变量,启用严格类型检查模式能够最大限度的利用typescript静态检查带来的益处。使用严格类型检查模式对提高代码质量更有利。

原始类型

boolean

const y: boolean = true
const n: boolean = false

string

typescript中的string类型对应JavaScript中的string原始类型

const foo:string = 'foo'

number

typescript中的number对应JavaScript的number。能够采用双精度64位二进制浮点数格式存储的数字

// 二进制数
const bin: number = 0b1010
// 八进制数
const oct: number = 0o744
// 十进制
const interget: number = 10
const float: number = 3.14
// 十六进制
const hex: number = 0xffffff

bigint

表示任意精度的整数。

// 二进制数
const bin: bigint = 0b1010
// 八进制数
const oct: bigint = 0o744
// 十进制
const interget: bigint = 10
// 十六进制
const hex: bigint = 0xffffff

symbol 和unique symbol

对应的是JavaScript中的Symbol类型

const key: symbol = Symbol()
const symbolHasInstance: symbol = Symbol.hasInstance
const s1: symbol = Symbol.for('foo')

为了将一个symbol值作为固定值的字面量,typescript引入unique symbol表示

const s0: unique symbol = Symbol()
const s1: unique symbol = Symbol.for('s1')
  1. unique symbol 类型的主要用途是用作接口,类等类型的可计算属性名
    如果可计算属性名在接口中添加了一个类型成员。类型成员的名字必须是固定的,否则接口定义将会失去意义。symbol类型的常量y不能作为接口的类型成员。
    const x: unique symbol = Symbol()
    const y: symbol = Symbol()
    interface Foo {[x]:string;[y]: string // error 必须使用unique symbol
    }
    
  2. typescript只允许用const声明或者readonly属性声明来定义unique symbol类型的值
    实际上,unique symbol类型的涉及初衷是作为一种变通方法,让一个symbol值具有字面量的类型,表示一个固定的值
    typescript选择将一个symbol值和声明它的标识符绑定在一起,通过绑定改symbol值的标识符来标识symbol字面量,这种设计保证了symbol值的和标识符之间的绑定关系是不可变的。
    const a: unique symbol = Symbol()
    interface WithUniqueSymbol {readonly b: unique symbol;
    }
    class C {static readonly c: unique symbol = Symbol()
    }
    
  3. unique symbol类型的值只允许用Symbol()函数或者Symbol.for()方法的返回值进行初始化。
    const a: unique symbol = Symbol()
    const b: unique symbol = Symbol('adb')const c: unique symbol =  a // error
    const d: unique symbol = b //error
    
    这种相同的参数调用Symbol.for()方法实际上返回的是相同的symbol值。可能出现unqiue symbol类型的值实际上是同一个symbol值的情况。
    const a :unique symbol = Symbol.for('same')
    const b: unique symbol = symbol.for('same')
    
    编译器不会报错,开发者得自己留意
    在设计上,unique symbol类型都是一中特定的类型。在不同的unique symbol类型之间不允许相互赋值,在比较两个unique symbol的类型的值,返回的永远都是fasle
    const a: unique symbol = Symbol()
    const b: unique symbol = Symbol()
    if (a === b) { // error
    return true
    }
    return false 
    
  4. unique symobl是symbol类型的子类型,可以将unique symbol类型的值赋值给symbol类型
    const a: unique symbol = Symbol()
    const b: symbol = a
    
  5. 类型推断
    // a和b均为symbol类型,没有const声明
    let a = Symbol() 
    let b = Symbol.for('')
    // c和d均为unique symbol 类型
    const c = Symbol()
    const d = Symbol.for() 
    // e和f均为symbol类型
    const e = a
    const f = a
    

Nullable

指的是值可以为undefined或者null的类型

  1. undefined
    const foo: undefined = undefined
    
  2. null
    const foo: null = null
    
  3. --strictNullChecks
    undefined值和 null值不再能够赋值给不相关的类型。例如,undefined值和null值不允许赋值给string类型。在该模式下,undefined值只能够赋值给undefined类型;同理,null值也只能赋值给null类型。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

void

void 表示某个值不存在,该类型用作函数的返回值类型。

function log(message: string) : void {console.log(message)
}
  1. --strictNullChecks
    /*** --strictNullChecks = true*/
    function foo(): void { // truereturn undefiend
    }
    function bar(): void { //errorreturn null
    }
    
    /*** --strictNullChecks = false*/ 
    function foo(): void { // truereturn undefiend
    }
    function bar(): void { // truereturn null
    }
    

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

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

相关文章

【ChatGPT with Date】使用 ChatGPT 时显示消息时间的插件

文章目录 1. 介绍2. 使用方法2.1 安装 Tampermonkey2.2 安装脚本2.3 使用 3. 配置3.1 时间格式3.2 时间位置 4. 反馈5. 未来计划6. 开源协议7. 供给开发者自定义修改脚本的文档7.1 项目组织架构7.2 定义新的 Component(1) 定义一个新的 Component 类(2) 注册该 Component 7.3 一…

ICode国际青少年编程竞赛- Python-1级训练场-基本操作

ICode国际青少年编程竞赛- Python-1级训练场-基本操作 1、 Dev.step(3)2、 Dev.step(1)3、 Dev.step(7)4、 Dev.step(-1)5、 Dev.step(-5)6、 Dev.step(3) Dev.step(-8)7、 Dev.turnRight() Dev.step(1)8、 Dev.turnLeft() Dev.step(1)9、 Dev.step(4) Dev.tur…

自动找出字符串中有符号数字

需求 代码 class Solution:def myAtoi(self, s: str) -> int:s s.strip() # 删除首尾空格if not s: return 0 # 字符串为空则直接返回res, i, sign 0, 1, 1int_max, int_min, bndry 2 ** 31 - 1, -2 ** 31, 2 ** 31 // 10if s[0…

2024年 Java 面试八股文——SpringMVC篇

目录 1.简单介绍下你对springMVC的理解? 2.说一说SpringMVC的重要组件及其作用 3.SpringMVC的工作原理或流程 4.SpringMVC的优点 5.SpringMVC常用注解 6.SpringMVC和struts2的区别 7.怎么实现SpringMVC拦截器 8.SpringMvc的控制器是不是单例模式?如果是&am…

B树:原理、操作及应用

B树:原理、操作及应用 一、引言二、B树概述1. 定义与性质2. B树与磁盘I/O 三、B树的基本操作1. 搜索(B-TREE-SEARCH)2. 插入(B-TREE-INSERT)3. 删除(B-TREE-DELETE) 四、B树的C代码实现示例五、…

蓝桥杯练习系统(算法训练)ALGO-953 混合积

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 众所周知,人人都在学习线性代数,既然都学过,那么解决本题应该很方便。   宇宙大战中&…

如何在postman上提交文件格式的数据

如何在postman上提交文件格式的数据 今天在写一个文件上传的功能接口时,想用postman进行提交,花了些时间才找到在postman提交文件格式的数据。记录一下吧! 1.打开postman,选择POST提交方式,然后在Params那一行的Head…

数据分析--客户价值分析RFM(K-means聚类/轮廓系数)

原数据 import os import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn import metrics ### 数据抽取,读⼊数据 df pd.read_csv("customers1997.csv") #相对路径读取数据 print(df.info()) pr…

WPF之自定义绘图

1,创建自定义控件类 class CustomDrawnElement:FrameworkElement{public static readonly DependencyProperty BackgroundColorProperty;static CustomDrawnElement(){FrameworkPropertyMetadata meta new FrameworkPropertyMetadata(Colors.SkyBlue);meta.Affects…

Python-------实现人生重开模拟器

人生重开模拟器 代码展示:实现思路序言一、设置初始属性1.游戏标题2.属性初始化 二、设置角色性别三、设置角色出生点四、针对每一年的岁数,自动生成人生经历总结 代码展示: # 人生重开模拟器 import random import sys import timeprint(------------------------…

服务器IP选择

可以去https://ip.ping0.cc/查看IP的具体情况 1.IP位置--如果是国内用,国外服务器的话建议选择日本,香港这些比较好,因为它们离这里近,一般延时低(在没有绕一圈的情况下)。 不过GPT的话屏蔽了香港IP 2. 企…

GPT是什么?直观解释Transformer | 深度学习第5章 【3Blue1Brown 官方双语】

【官方双语】GPT是什么?直观解释Transformer | 深度学习第5章 0:00 - 预测,采样,重复:预训练/生成式/Transformer模型 3:03 - Transformer 的内部结构 6:36 - 本期总述 7:20 - 深度学习的大框架 12:27 - GPT的第一层:…

【论文浅尝】Large Language Models for Generative Information Extraction: A Survey

本文对生成式IE的LLM进行了全面的探索。使用两种分类法对现有的代表性方法进行分类: (1)众多IE子任务的分类法,旨在对可以使用llm单独或统一提取的不同类型的信息进行分类; (2)学习范式分类法,对利用llm生成IE的各种新方法进行分类。 Preliminaries o…

msmpi 高性能计算实现文件读取输入

【高性能计算】完美解决Windows下安装mpi环境并应用到VSCode中报错问题的方法_c:\program files (x86)\microsoft sdks\mpi\include/-CSDN博客 环境配置 然后跑这个代码测试即可 // 命令行参数: //mpiexec -n 9 "C:\Users\ASUS\Desktop\testMPI\MPIv2.exe&qu…

【氮化镓】GaN器件可靠性及市场前景概述

文章是关于氮化镓(GaN)场效应晶体管(FET)技术在空间应用中的可靠性、辐射效应和市场前景的概述。文章由Airbus Defence & Space的多位专家撰写,涵盖了GaN FET技术的多个关键方面,包括技术概述、可靠性问…

Find My无人机|苹果Find My技术与无人机结合,智能防丢,全球定位

无人机是利用无线电遥控设备和自备的程序控制装置操纵的不载人飞机,或者由车载计算机完全地或间歇地自主地操作。无人机按应用领域,可分为军用与民用。军用方面,无人机分为侦察机和靶机。民用方面,无人机行业应用,是无…

opencv基础篇 ——(十二)轮廓提取与绘制

opencv基础篇 ——(十二)轮廓提取与绘制 findContours轮廓提取 void void findContours( InputArray image, OutputArrayOfArrays contours,OutputArray hierarchy, int mode,int method, Point offset Point());功能介绍 cv::findContours 是 OpenC…

【python】商业数据聚类-回归数据分析可视化(源码+数据)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

ios CI/CD 持续集成 组件化专题四-(手动发布私有库-组件化搭建)

一 、创建私有索引库 1.1 、第一步 首先检查本地是否存在需要的私有索引库 pod repo list 例如:dp_base_ios_spec 在本地不存在该私有索引库 1.2 、第二步 在git下下创建一个新的库,这个库用来保存私有库的podspec文件,取名叫xxxSpec用以…

以更多架构核心专利,推进 SDS 产业创新创造

今天是第 24 个世界知识产权日,今年世界知识产权日活动的主题是:“知识产权和可持续发展目标:立足创新创造,构建共同未来。” 这也正是 XSKY 在软件定义存储领域的目标之一。以“数据常青”为使命的 XSKY,始终立足于软…