首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【TypeScript 演化史 — 第二章】基于控制流类型分析 和 只读属性

下面的示例演示了 TypeScript 如何理解赋值局部变量影响,以及如何相应地缩小该变量类型: let command: string | string[]; command = "pwd"...尽管如此,类型检查器在任何给定位置都为 command 变量使用最具体类型 在分配了字符串 “pwd” 之后,command 变量就不可能是字符串数组(联合类型惟一其他选项)。...因此,没有 command 变量联合类型删除字符串类型,产生以下编译时错误: Property 'join' does not exist on type 'string | string[]...在严格 null 检查模式下,undefined 类型会自动添加到可选属性联合类型,因此我们不必显式将其写出。 明确赋值分析 基于控制流另一个新特性是明确赋值分析。...在严格 null 检查模式下,对类型不允许为 undefined 局部变量有明确赋值分析: let name: string; // Error: 在赋值使用了变量 “name” console.log

2K10

TypeScript基础(一)基本类型与类型运算

以下是对常见类型运算符进行介绍: 1. 联合类型(Union Types) 使用 | 运算符将多个类型组合成一个联合类型。表示变量可以是多个类型任意一个。...然后将其用于声明变量p。 通过使用类型别名,我们可以将复杂类型定义简化为一个易于理解和使用名称。 类型约束 在TypeScript,函数可以通过参数类型、返回类型和函数重载等方式进行约束。...(2, 3); // 返回 6 在这个示例,函数multiply接受两个参数,都是number类型,并且返回也是number类型。..."Hello, John" let result2 = getValue(5); // 返回 10 在这个示例,我们定义了一个名为getValue函数,使用多个重载声明来定义不同参数类型对应返回类型...总结 -- 通过了解这些基本类型和类型运算,开发者可以更好地定义变量、函数参数和返回数据类型,并在编码过程捕获潜在错误。

19530
您找到你想要的搜索结果了吗?
是的
没有找到

【C语言】 C 语言 关键字分析 ( 属性关键字 | 常量关键字 | 结构体关键字 | 联合体关键字 | 枚举关键字 | 命名关键字 | 杂项关键字)

参数 | 本质 代表 没有 ) (2) void * 指针介绍 ( 被赋值 [ 左 ] 时可以被赋值为任意指针类型变量 | 右 赋值其它类型变量时 需要将 void* 指针强转为被赋值类型 )...使用sizeof查看void大小, gcc 返回1 这是编译器厂商一个, 不是C语言中规定....void 不能修饰变量, 否则会报错. ---- (2) void * 指针介绍 ( 被赋值 [ 左 ] 时可以被赋值为任意指针类型变量 | 右 赋值其它类型变量时 需要将 void* 指针强转为被赋值类型...) void * 指针说明 : 1.被赋值情况(作为左) : void * 指针作为被赋值对象, 即在 “=” 左侧, 其可以 直接被赋值为任何指针类型变量; 2.赋值其它指针(作为右) :...//如果没有指定, 那么后面一个默认是在前一个基础上加1 //如果显示赋值后, 后面的类型依次加 1, 显示赋值之前默认 0 开始 //枚举是常量, 不能获取枚举地址 enum color

2.3K20

TypeScript入门——扩展类型之枚举

枚举通常用来约束某个变量取值范围,当然不仅仅是变量,还有函数参数或者函数返回,比如说约束变量sex性别的范围,不是男就是女了,不可能是不男不女吧 看过我上一篇文章小伙伴也许会回忆到当时文章也定义了变量..."; gender = "男"; //根据性别查询函数 function searchUsers(g:"男" | "女") { } 代码可以看到变量gender约束跟函数参数约束产生相同代码...字面量类型不会进入到编译结果 字面量类型是不会参与编译,运行完成后会消失,如下: 如果我们想在TS动态读取变量中有哪些取值显示在页面上,是做不到,因为TS在编译时候已经丢失了变量约束信息。...,然后将Gender传入函数,如果Gender没有,那么赋值为一个对象,随后对象添加一条属性male,赋值为美女,以及female赋值为帅哥,因此可以发现枚举是会参与代码编译,所以我们能在代码编译运行阶段动态打印枚举属性...,当Monday赋值为1时,其它会根据上一个依次自增,如果第一个没有赋值,那么它会0开始, 数字枚举编译结果和字符串枚举编译结果有差异 这是数字枚举编译后结果 3.

57340

Linux Shell基础篇三 - 内置命令

将其加入索引数组 popd 目录栈删除记录 printf 使用格式化字符串显示文本 pushd 向目录栈添加一个目录 pwd 显示当前工作目录路径名 read STDIN 读取一行数据并将其一个变量...readarray STDIN 读取数据行并将其放入索引数组 readonly STDIN 读取一行数据并将其一个不可修改变量 return 强制函数以某个退出,这个可以被调用脚本提取...set 设置显示环境变量和 shell 属性 shift 将位置参数依次向下降一个位置 shopt 打开/关闭控制 shell 可选行为变量值 source 读取执行指定文件命令(在当前...,返回退出状态码 alias设置别名 alisa用于命令创建别名。...,但不换行 \t 插入tab \v 与\f相同 \\ 插入\字符 \nnn 插入nnn(八进制)所代表ASCII字符; read读取控制台输入 read用于标准输入读取数据赋值变量

1.3K30

TypeScript基础常用知识点总结

,如下所示: let arr:number[] = [12,13] let [x,y] = arr // 将数组两个元素赋值变量 x 和 y console.log(x) console.log...indexOf() 搜索数组元素,返回它所在位置。如果搜索不到,返回 -1,代表没有此项。 join() 把数组所有元素放入一个字符串。...lastIndexOf() 返回一个指定字符串最后出现位置,在一个字符串指定位置后向前搜索。 map() 通过指定函数处理数组每个元素,返回处理后数组。...slice() 选取数组一部分,返回一个新数组。 some() 检测数组元素是否有元素符合指定条件。 sort() 对数组元素进行排序。 splice() 数组添加或删除元素。...pop()元组移除元素(最后一个),返回移除元素。

4.8K30

【TypeScript】TS类型断言-类型声明和转换(七)

TS并不能判断在使用联合类型时具体是那种类型?当我们不知道是什么类型情况下要使用某个类型特有的属性或者方法,那么就可以用断言来实现,它实际上是对编辑器做了提前告知行为,但是并不能保证运行中报错。...).length;//0//anyValue是string或者number联合类型,在使用时候将其断言为string类型let anyValue:string | number = 'zhangsan'...}编辑器中会直接报错,我们可以在变量声明时候就告诉编辑器该属性一定会被赋值,即在变量名后面加个!...比如以下案例:我们知道obj一定是有,请求接口后赋值obj,所以一定是有,但是我们直接赋值,就会报错const obj = {};obj.name = 'zhangsan';obj.age =...19;const obj:Object = {};(obj).name = 'zhangsan';(obj).age = 19;(4)调用函数时将参数和返回断言成精确function

29410

Java Mybatis基础知识总结

Mybatis在处理#{}时,会将sql#{}替换为?号,调用PreparedStatementset方法来赋值; Mybatis在处理时#{},就是把{}替换成变量。...set方法结果集对象属性赋值。...实际上这里使用了反射机制,在配置文件假设编写了一条select语句,查询之后,列名与属性名要一一对应(不对应可以采用列起别名),然后每个列名添加“set”,通过反射机制获取set方法,然后再通过反射机制...假设在配置文件编写了一条insert语句,那么这条语句需要哪里来呢,在mybatismapper配置中有parameterType属性,该属性是专门sql语句占位符传,其实这里也是使用了反射机制...其执行原理为,使用OGNLsql参数对象中计算表达式,根据表达式动态拼接sql,以此来完成动态sql功能。 ● Mybatis是如何将sql执行结果封装为目标对象返回

1.6K30

深入理解 TypeScript Keyof 运算符,让你代码更安全、更灵活!

它被称为索引查询运算符,因为该关键字会查询 keyof 后指定类型。索引基类型查询从属性及其相关元素(如默认关键字及其数据类型)获取值和属性。...随后,我们使用 var 或 let 定义了两个变量 variableName 和 anotherVariableName,使用 keyof 关键字调用 DemoClass。...当我们为变量赋值时,TypeScript 会确保赋值是 DemoClass 有效属性之一。...keyof T 返回是字符串字面量类型联合。字面量指的是赋值常量变量固定。由于 K 是一个字符串字面量类型,我们使用 extends 关键字对 K 进行约束。...函数 sampleStringPair 接受两个参数:property(类型为 keyof stringMapDemo)和 value(字符串类型),返回一个 stringMapDemo 类型对象。

6810

《你不知道js(上卷)》笔记1(基础知识和闭包)

1.2 关于变量查找 变量查询分为LHS查询和RHS查询,上面赋值操作将进行LHS查询。 当变量出现在赋值操作左侧时进行 LHS 查询,出现在右侧时进行 RHS 查询。...RHS查询相当于查找某个变量,RHS查询并不是真正意义上赋值操作右侧”,更准确地说是“非左侧”。...RHS查询, 参数传递需要将2赋值方法形式参数a。...但实际上会将其看成两个声明:var a;和a = 2;。第一个定义声明是在编译阶段进行。第二个赋值声明会被留在原地等待执行阶段。...我们保持内部数据变量是隐 藏且私有的状态。可以将这个对象类型返回看作本质上是模块公共 API。 模块模式两个必要条件: 必须有外部封闭函数,该函数必须至少被调用一次。

43020

第九节(结构、联合typedef)

第29^39行提示用户输入数据,并将其储存在mybox结构成员。 看上去只用储存两个,因为mybox只有两个成员。...例如,要把一个数组元素数据赋值另一个数组元素,可以这样写: list[1] = list[5]; 该语句将list[5]结构每个成员都赋值list[1]结构相应成员。...例如,要声明一个包含sale类型结构数组,初始化两个数组成员(即,两个结构),可以这样写: struct customer { char firm[20]; char contact[25...注意,联合成员是“或”关系。如果声明是结构,则创建结构实例中都包含这两个。 而联合在同一时间内只能储存一个。 下面图解释了如何在内存中储存shared联合。...第22行double类型变量d赋值。注意,除了d,其余各变量值都无法预知。 此时,第14行赋c也丢失了,因为第22行d赋值时己经擦写了c。 这是联合成员占用同一内存空间证明。

16920

带你了解 JavaScript 作用域

总结:变量赋值会执行两个动作:首先是编译器在当前作用域中声明变量(如果变量未被声明过);接着运行时引擎在作用域查找该变量,能找到就会对它赋值。...顾名思义,它们意思是Left hand side 和 Right hand side LHS:变量出现在赋值操作左侧(查找赋值操作目标是谁)undefined RHS:变量在其他位置出现(查找源头...// 相比之下 foo = 'bar' 这里对 foo 查询则是LHS查询,我们并不关心 foo 当前是什么, 只是想为这个赋值操作找到目标。...如果LHS查询在所有嵌套作用域中都没有找到所需变量,引擎就会在全局作用域中创建一个具有该名称变量,并将其返回引擎。...因此在严格模式下LHS查询失败时不会创建返回全局变量,引擎同样会抛出 ReferenceError。

28030

TypeScript类型断言-类型声明和转换

TS并不能判断在使用联合类型时具体是那种类型?当我们不知道是什么类型情况下要使用某个类型特有的属性或者方法,那么就可以用断言来实现,它实际上是对编辑器做了提前告知行为,但是并不能保证运行中报错。...).length;//0//anyValue是string或者number联合类型,在使用时候将其断言为string类型let anyValue:string | number = 'zhangsan'...我们可以在变量声明时候就告诉编辑器该属性一定会被赋值,即在变量名后面加个!符号let score!...比如以下案例:我们知道obj一定是有,请求接口后赋值obj,所以一定是有,但是我们直接赋值,就会报错const obj = {};obj.name = 'zhangsan';obj.age =...19;我们可以改成这样就不会报错啦const obj:Object = {};(obj).name = 'zhangsan';(obj).age = 19;(4)调用函数时将参数和返回断言成精确

31910

【TypeScript 演化史 — 第三章】标记联合类型 与 never 类型

TypeScript 2.0 实现了一个相当有用功能:标记联合类型,您可能将其称为 sum 类型或与其他编程语言区别开联合类型。...本质上,编译器跟踪程序控制流以缩小标记联合类型。除了 switch 语句之外,它还要考虑条件以及赋值返回影响。...never 类型表示类型从不出现。具体而言,never 是永不返回函数返回类型,也是变量在类型保护永不为 true 类型。...这些是 never 类型的确切特征,如下所述: never 是所有类型子类型并且可以赋值所有类型。 没有类型是 never 子类型或能赋值 never(never类型本身除外)。...虽然这两者看起来很相似,但它们是两个不同概念: 没有显式返回函数将隐式返回 undefined 。虽然我们通常会说这样函数“不返回任何东西”,但它会返回

1K20

Mysql数据库-存储过程

变量赋值 -- 变量赋值方式一: set 变量名 = 变量值; -- 变量赋值方式二: 将查询一个结果赋值变量 select 列名 into 变量 from 表名[where 条件]; -...,所以可以写在同一行) declare men,women int; -- 查询男同学总分,赋值变量men select sum(score) into men from student...where gender = '男'; -- 查询女同学总分,赋值变量women select sum(score) into women from student where gender...看成java成员变量,当前会话有效: 一次登录到退出 2. 用户变量定义 set @变量名 = 变量值; -- 用户变量变量名之前必须加@ -- 用户变量必须 3....() returns int begin -- 定义变量 declare s_count int; -- 查询成绩大于95分学生数量,s_count赋值 select count(*)

11K10

深入理解作用域和闭包

紧接着,我们声明了一个名为count变量赋值为10。 调用add函数,声明result变量来接收函数返回。...上述代码: 我们创建了一个名为setAge函数,它接受一个对象 在函数内部,为参数对象新增了一个name属性,将其赋值为10 随后,我们将参数对象赋值为一个空对象,又添加了一个name属性赋值...我们声明了一个名为getResult函数,接受两个参数 函数内部使用var声明了一个名为total变量赋值两个参数之和。...在函数内部,我们还直接初始化了一个名为globalResult变量赋值为total变量值 最后,返回total。..." }; 上述代码: 我们使用const声明了两个变量name、obj 为obj添加name属性,我们没有重新obj赋值,因此它可以正常添加 紧接着,我们name赋了新,此时就会报错TypeError

51930

JS作用域与闭包

在函数执行之后,栈将其环境弹出,把控制权返回之前执行环境。 当代码在一个环境执行时,会创建变量对象一个作用域链(scope chain)。...在这个例子,innerTest()内部能够访问到其他两个环境所有变量,即能够访问到变量有: 变量c、变量b和变量a。 因为这两个环境是它父执行环境。 图中矩形表示特定执行环境。...,而是定义了一个匿名函数,并将立即执行该匿名函数结果赋值数组。...匿名函数有一个参数num,也就是最终函数要返回。 在调用每一个匿名函数时,传入了变量 i 。 由于函数参数时按传递,所以就会将变量 i 赋值参数num。...在这个匿名函数内部,又创建返回了一个返回num闭包。 这样,result数组每个函数都有自己num变量一个副本,因此就可以返回各自不同数值了。

1.9K20

Java编程思想第五版(On Java8)(四)-运算符

它代表着获取 = 右边左边变量。右边可以是任何常量、变量或者可产生一个返回表达式。但左边必须是一个明确、已命名变量。也就是说,必须要有一个物理空间来存放右边。...举个例子来说,可将一个常数赋一个变量(A = 4),但不可将任何东西赋一个常数(比如不能 4 = A)。 基本类型赋值都是直接。因为基本类型持有的是真实而不是一个对象引用。...每种类型运算符,都有两个版本可供选用;通常将其称为“前缀”和“后缀”。“递增”表示 ++ 运算符位于变量或表达式前面;而“后递增”表示 ++ 运算符位于变量后面。...类似地,“递减”意味着 -- 运算符位于变量前面;而“后递减”意味着 -- 运算符位于变量后面。对于递增和递减(如 ++a 或 --a),会先执行递增/减运算,再返回。...若变量 y 非 0 的话,在 C/C++ ,这样赋值操作总会返回 true。于是,上面的代码示例将会无限循环。而在 Java ,这样表达式结果并不会转化为一个布尔

85851
领券