TypeScript 类型断言、类型推论

深入理解 TypeScript 中的类型断言(Type Assertion) 类型断言是 TypeScript 中一个强大而独特的特性,它允许开发者告诉编译器:"我知道这个值的类型是什么,请相信我"。本文将全面探讨类型断言的概念、语法、使用场景、最佳实践以及潜在陷阱,帮助你在 TypeScript 开发中更有效地使用这一特性。 阅读详情

类型断言

类型断言是一种 TypeScript 特性,用于告诉编译器将一个值视为特定的类型,即使编译器本身的类型推断可能不同。

类型断言并不会改变变量的实际运行时类型,而是在编译阶段告知TypeScript编译器开发者期望该表达式具有某种类型。

注意:类型断言 不是 类型转换,因为转换通常意味着某种运行时的支持。但类型断言纯粹是一个编译时语法,只是在编译阶段起作用,不进行特殊的数据检查和解构,它没有运行时的影响。同时,它也是一种为编译器提供关于如何分析代码的方法。

语法格式:

  1. <类型>值
  2. 值 as 类型

类型断言主要用于以下情况:

  1. 当 TypeScript 的类型推断不够精确,而开发者明确知道变量的实际类型时。
  2. 当需要访问特定类型的属性或方法,但 TypeScript 由于自身的类型限制不允许直接访问时。
let someValue: any = "Hello, TypeScript!";

// 方式一:<类型>值
let length1: number = (<string>someValue).length;

// 方式二:值 as 类型
let length2: number = (someValue as string).length;

当你在TypeScript里使用JSX时,只有 as 语法断言是被允许的。

类型推断

在 TypeScript 中,类型推论允许 TypeScript 在某些情况下根据变量的初始化值自动推断出变量的类型。

类型推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时。

  1. 变量初始化时的类型推论
    当声明一个变量并同时为其赋值时,TypeScript 会根据赋值的值来推断变量的类型。

示例:

let num = 5;  // TypeScript 会推断 num 的类型为 number
let isTrue = true;  // TypeScript 会推断 isTrue 的类型为 boolean
let arr = [1, 2, 3];  // TypeScript 会推断 arr 的类型为 number[]

let str = "Hello";  // TypeScript 会推断 str 的类型为 string
str = "hi"; // 合法,str 的类型为 string
str = 10;  // Error: 不能将类型“number”分配给类型“string”。

当需要从几个表达式中推断类型时候,会使用这些表达式的类型来推断出一个最合适的通用类型。

let arr = [0, 1, null];

数组 arr 中的元素包含了数字 0 和 1 ,以及 null ,所以数组元素的类型被推断为 number 或 null 的联合类型,整个数组的类型就是 (number | null)[] 。

  1. 函数返回值的类型推论
    如果函数的返回值是通过计算得出的,并且没有显式指定返回值类型,TypeScript 会根据返回的表达式来推断函数的返回值类型。

示例:

function sum(a: number, b: number) {
  return a + b;  // TypeScript 会推断该函数的返回值类型为 number
}
  1. 对象属性的类型推论
    在对象初始化时,TypeScript 也会对对象属性进行类型推论。

示例:

// TypeScript 会推断 person 的类型为具有 name: string 和 age: number 属性的对象类型
let person = {
  name: "John",
  age: 30
}; 

// 对象字面量只能指定已知属性,并且“firstName”不在类型“{ name: string; age: number; }”中。
person = {
  firstName: "John",
  lastName: "Bob"
}

在这里插入图片描述

由于最终的通用类型取自候选类型,有些时候 候选类型 共享 相同的通用类型,但是却没有一个类型能做为所有候选类型的类型。
没有通用类型:

let zoo = [new Rhino(), new Elephant(), new Snake()];

在这种情况下,TypeScript 编译器 会根据数组中元素的实际类型来推断数组的类型。
在数组中, Rhino 、 Elephant 和 Snake 是自定义的类,它们之间没有找到最佳通用类型,类型推断的结果为联合数组类型:(Rhino | Elephant | Snake)[]。

如果想要TypeScript编译器 推断zoo的类型为Animal[],但是这个数组里没有对象是Animal类型的,因此不能推断出这个结果。
当候选类型不能作为最佳通用类型使用的时候,需要明确的指出类型:

let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];

既然TypeScript 编译器会自动判断变量的类型,那为什么还要在编写代码时明确类型声明呢?

JavaScript的变量没有类型,在运行时明确变量的值的类型。
在单纯的为变量a赋值时,a是什么类型都影响不大:a = 10、a = "hello"、 a = true。
假如a作为某个函数的参数,需要传递到函数中使用呢?

function sum(a, b) {
  return a + b;
}
console.log( sum(10, 15) );  // 25
console.log( sum("10", 15) );  // "1015"

假如要将计算结果进行展示或在别的函数里继续使用,会导致更多错误。
sum(10, 15) 和 sum("10", 15)的计算结果相差很大,但是代码不会报错,那排查问题就会特别困难。
因此,明确声明该参数的类型可以防止意外传递错误类型的值,并且在阅读函数定义时就能清楚了解输入的预期。

function sum(a:number, b:number) {
  return a + b;
}
console.log( sum(10, 15) );  // 25
console.log( sum("10", 15) );  // Error: 类型“string”的参数不能赋给类型“number”的参数。

明确指出变量类型有以下好处:

  1. 增强代码的自解释性
    • 明确的类型声明使其他开发者在阅读代码时能更快速、清晰地理解变量的预期用途和可能的值。
  2. 提高代码的可维护性
    • 当代码规模较大或经过多人协作开发时,显式的类型有助于确保代码的一致性和规范性。
    • 未来进行代码修改和扩展时,清晰的类型信息可以降低出错的风险。
  3. 提前发现错误,增强类型安全性
    • 显式声明类型,编译器能在编译阶段检测到更多潜在的类型不匹配错误,减少潜在的运行时错误。
  4. 更好的开发工具支持
    • 开发工具可以基于明确的类型提供更准确和有用的代码提示、自动完成和重构功能。
  5. 文档化代码
    • 类型声明相当于为代码添加了一种内置的文档,方便后续开发者理解。

类型断言、类型推论的区别

类型断言

  • 手动干预:是开发者手动告诉编译器将某个值视为特定的类型,即使编译器本身的推断可能不同。
  • 显式语法:通过特定的语法 <类型>值 或 值 as 类型 来实现。
  • 可能存在风险:如果断言不正确,可能在运行时导致错误,因为编译器在编译阶段不会深入检查断言的正确性。

类型推论(Type Inference):

  • 自动进行:TypeScript 编译器根据变量的初始化值或函数的返回值等上下文信息,自动推断出变量或返回值的类型。
  • 无需显式操作:开发者不需要进行任何特殊的语法或操作来触发类型推论,它是在编译时由编译器自动完成的。
  • 基于值:类型的推断是基于所赋的值或计算得出的结果。
CentOS-7-x86_64经典版本的含义 这个版本的ISO文件包含了所有的软件包,所以文件比较大,但在安装过程中不需要下载软件包。如果你有一个稳定的网络连接,并且希望安装时能够选择最新的软件包,或者只安装特定的软件包,那么可以选择NetInstall版本。在这里,它可能是指这个ISO文件发布于2207年2月,但是这似乎是一个错误,因为截止到现在(2022年)的时间,都没有到达2207年。另外,还有一个DVD版本,这个版本的ISO文件包含了大部分常用的软件包,安装时可能需要网络连接,但比NetInstall版本少一些。 阅读详情

相关推荐

pgAdmin4备份恢复实战:从安装到避坑指南

本文提供了一份详尽的pgAdmin4备份恢复实战指南,涵盖从安装配置到执行备份恢复的全流程。针对Windows环境下的浏览器兼容性、二进制路径配置等常见问题,给出了具体解决方案。重点强调了使用pgAdmin4进行备份恢复的可靠性,特别是在处理包含PostGIS等扩展的数据库时,能有效避免数据类型和权限错误,确保数据迁移的完整性与安全性。

weixin_29266007的博客 439

TS类型断言

TypeScript中的类型断言是一种将变量或表达式的类型强制转换为开发者指定的类型的方式。可以使用尖括号(<>)语法或者as语法进行类型断言。使用as语法的类型断言:这里,我们将一个any类型的变量str断言为string类型,并使用它的length属性获取字符串的长度。

weixin_42560424的博客 6896

《Sigrity SystemSI 2023+LPDDR4仿真自学笔记》(一)创建工程(Part1)

为了加强SystemSI 2023软件的熟悉度,咱们完整的走一个仿真全流程。

weixin_45199544的博客 6334

TS:类型断言

类型断言好比其他语言中的类型转换,但是不是真正的类型转换方式,之所以不被称为类型转换,是因为转换通常意味着某种运行时的支持。但是,类型断言纯粹是一个编译时语法,同时,它也是一种为编译器提供关于如何分析代码的方法。

小栗子的博客 2428

SBP依赖计算中的蝴蝶效应:一个Prefab修改如何触发全量重建?

本文深入探讨了Unity中SBP(Scriptable Build Pipeline)依赖计算的蝴蝶效应,解析了Prefab修改如何触发全量重建的机制。通过分析Asset与Object的层级关系、依赖计算的三种维度及CacheEntry系统,揭示了全量重建的根本原因,并提供了依赖可视化工具开发、优化策略与最佳实践,帮助开发者提升构建效率。

weixin_29015051的博客 444

贝莱德(BlackRock)—— 阿拉丁(Aladdin)平台的 AI 赋能升级

全称(资产、负债、债务与衍生品投资网络),是贝莱德自主研发的一体化投资管理与风险管理技术平台,被誉为全球资管行业的 “

xm_mm的博客 1731

【TypeScript】007-类型断言

文章目录8、类型断言语法类型断言的用途将一个联合类型断言为其中一个类型将一个父类断言为更加具体的子类将任何一个类型断言为 `any`将 `any` 断言为一个具体的类型类型断言的限制双重断言类型断言 vs 类型转换类型断言 vs 类型声明类型断言 vs 泛型 8、类型断言 类型断言(Type Assertion)可以用来手动指定一个值的类型。 语法 值 as 类型 或 <类型>值 在 tsx 语法(React 的 jsx 语法的 ts 版)中必须使用前者,即 值 as 类型。 形如 &l

訾博(ZiBo)的博客 731

[24] cuda 应用之 nppi 实现图像颜色通道变换

[24] cuda 应用之 nppi 实现图像颜色通道变换

yohnyang的博客 343

【进阶】TS 中的 类型断言 和 泛型

本章内容包含: 1、类型断言,2、非空断言,3、typeof,4、keyof,5、泛型,6、泛型函数,7、泛型的问题,8、泛型接口,9、泛型工具

jiang_ziY的博客 1万+

微信小程序启用蓝牙设备特征值变化时的notify功能

注意:这里的serviceUUID、notifyCharacteristicUUID 我会在后面写入数据时做重点说明。isNotifyBLECharacteristic:false, //是否启用蓝牙设备服务特征 notify。二、启用蓝牙设备特征值变化时的notify功能。下一篇 将继续介绍 微信小程序蓝牙设备写入数据。

wsk198726的专栏 1172

【python科研数据处理】将Endnote自动搜索的所有pdf文件,全都移动指定文件夹中

将Endnote自动搜索到的全部pdf文件,全都移动指定文件夹中1 背景2 问题解决 手动反爬虫,禁止转载:原博地址 https://blog.youkuaiyun.com/lys_828/article/details/122370892(优快云博主:Be_melting) 知识梳理不易,请尊重劳动成果,文章仅发布在优快云网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息 1 背景 在进行期末考试周后,面对最后一门功课,需要提交至少80篇SCI参考文献,因此最快下载文献的方式就是通过Web of S

lys_828的博客 1826

TypeScript类型推论和类型断言

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。

军火库 393

AI驱动的客户终身价值分析:深入理解公司的收入质量

客户终身价值(Customer Lifetime Value, CLV)是衡量客户在整个生命周期内能为企业带来多少利润的重要指标。传统的CLV计算方法往往过于简化,无法准确反映复杂的客户行为和收入模式。本文旨在介绍如何利用人工智能技术,特别是机器学习方法,构建更精确的CLV预测模型,从而帮助企业深入理解其收入质量。CLV的基本概念和商业意义传统CLV计算方法的局限性基于机器学习的CLV预测方法特征工程和模型选择策略实际应用案例和Python实现首先介绍CLV的基本概念和商业背景。

AI云原生与云计算技术学院 477

TypeScript类型推论与类型断言实例详解

类型推论,顾名思义就是指类型在哪里如何被推断。在TS语法中,如果有些没地方有明确指出类型,类型推论就会帮助提供类型,即声明变量时,不赋给类型,就会触发类型推论。

2301_80826038的博客 718

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

8. TypeScript 类型推论和类型断言

类型断言(Type Assertion)是一种告诉编译器变量的具体类型的方式。它允许你覆盖 TypeScript 的类型推断,就可以手动指定一个值的类型。

一名全栈开发工程师 624

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TypeScript 从入门到进阶之基础篇(六) 类型(断言 、推论、别名)| 联合类型 | 交叉类型

在一到五章,我们学习了在TypeScript 中 定义和使用各种类型 ,本章我们来学习TypeScript 在 类型(断言 、推论、别名)| 联合类型 | 交叉类型请注意 本章内容 可能会出现在你面试时的面试题 是面试题常问的内容。

枫ゞ的博客 1755

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

03 Typescript 类型推论和断言

由于类型断言会破坏编译器的类型推断,所以当我们使用类型断言时需要小心,编译的时候不报错,不代表运行的时候不报错。在谷歌浏览器中用审查元素选中元素后,在控制台查看 console.dir($0)类型断言是用来覆盖编译器推断的类型,使用断言来告诉TS这个变量应该是什么类型。在TS中,某些没有明确指出类型的地方,TS的类型推论机制会帮助提供类型。getElementById 方法返回值的类型是。,该类型只包含标签公共的属性和方法。等属性,所以此时必须使用类型断言来指定类型。发生在类型推论的常见场景。

weixin_56105228的博客 602

TypeScript——类型断言、类型推论

这种方式可以告诉编译器,“相信我,我知道自己在干什么”。类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。它没有运行时的影响,只是在编译阶段起作用。TypeScript会假设你,程序员,已经进行了必须的检查。如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。至于使用哪个大多数情况下是凭个人喜好;然而,当你在TypeScript里使用JSX时,只有。类型断言有两种形式。语法断言是被允许的。

泊一的博客 557

TypeScript - 联合类型、类型推论、类型断言

本文主要记录下 TypeScript 中的联合类型、类型推论、类型断言,日常学习总结篇。

lhz_333的博客 1108

Typescript 基本类型 和类型断言、类型推论,函数和接口

基础类型 boolean 布尔值 let bool :Boolean=true number 数字型 几进制都可以写 let num :number=10 string 字符串型 let str :string=hello${num} array 数组 数字数组 let arr:number[]=[1,2,3] let arr1:Array<number>=[1,2,3] 元组 特殊的数组类型 元组类型允许表示一个已知元素数量和类型的数组 let arr2:[number,s

y13103192727的博客 463

学习TypeScript7(类型断言|类型推论 |联合类型 |交叉类型)

typescript学习

philis66的博客 379

3-TypeScript 类型推论-别名-字面量类型-断言-字符串字面量类型

类型推论 什么是类型推论 以下代码虽然没有指定类型,但是会在编译的时候报错: let myFavoriteNumber = 'seven';//虽然没有给数据类型,但可以通过赋的值推论出来 myFavoriteNumber = 7; // error 报错,必须是字符串类型 事实上,它等价于: let myFavoriteNumber: string = 'seven'; myFavoriteNumber = 7; TypeScript 会在没有指定类型的时候推测出一个类型,这就是类型推论。 如果定义的

qq_56023114的博客 849

TypeScript学习三(类型推论|类型断言|联合类型|类型别名|交叉类型)

在上下文种当类型检查器无法断定类型时,可以使用缀表达式操作符 **!**进行断言操作是非null和非undefined的类型,即x!类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误,反而滥用类型断言可能会导致运行时错误。如果没有明确指定类型,那么TypeScript会依照类型推论的规则推断出一个类型。交叉类型就是跟联合类型相反,用&操作符表示,交叉类型就是两个类型必须存在。声明变量没有定义类型也没有赋值,TS会推断成any类型。联合类型用|分隔,表示取值可以为多种类型中的一种。

Vicky的博客 272

TypeScript 类型系统进阶:类型断言、联合类型、交叉类型、类型推论与类型别名详解

技术使用建议类型断言谨慎使用,避免误断导致运行时错误联合类型结合类型守卫使用,确保类型安全交叉类型用于对象类型的组合,注意属性冲突类型推论合理利用,避免过度依赖类型别名提高可读性和复用性,适合复杂结构。

qq_44376306的博客 373

5.typescript-任意值、类型推论、联合类型、类型断言、字符串字面量类型

1.任意值any 可以将任意类型的变量赋值给该类型的变量,没有指定类型的变量默认为any 也可以用来定义不定类型的数组 2.类型推论 上面说到没有指定类型的变量默认为any类型的,但是当声明变量时定义了该变量值,则默认变量为该值得类型值,这就是类型推论 若声明时未定义,则不会 3.联合类型 即可以取值为多种类型中的一种 下面的例子顶...

weixin_30606461的博客 148

零基础入门Typescript—类型推论,联合类型和类型断言

类型推论 - type inference 在类型脚本中,有的地方使用类型推论在没有明确类型注释时提供类型的信息 例如: let x = 3; 我们没有声明类型,但是类型推论其为number类型 联合类型 - union types 我们只需要用中竖线来分割两个,下面例子即表示可以number类型也可以string类型 当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法: numberOrString.length numberO

weixin_45745641的博客 250
上一篇: TypeScript 基础类型与高级类型
下一篇: TypeScript 接口
fishmemory7sec
博客等级 码龄5年 1165粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值