null
和
undefined
都有各自的类型名称。这些类型本身没有用处,因为我们只能将
null
和
undefined
赋值给定义为
null
或
undefined
类型的变量。
let u: undefined = undefined
u = 'string' // compile error
let n: null = null
n = 43 //compile error
默认情况下,
null
和
undefined
是所有类型的子类型。 就是说可以把
null
和
undefined
赋值给
number
类型的变量。
let value: string | undefined | null = null
value = 'hello'
value = undefined
注意:
默认情况下,将禁用
null
和
undefined
处理,我们可以通过在
tsconfig.json
文件将
strictNullChecks
设置为
true
来启用。当启用
strictNullChecks
时,本文的示例才能正常运行。
可选链接是一种 JavaScript 功能,它与 TypeScript 的空处理配合得很好。它允许使用紧凑的语法访问对象上的属性,这些属性可能存在,也可能不存在。它可以和
?.
(可选链)
运算符访在问属性时一起使用。
interface User {
name: string
address?: {
street: string
function printStreet(user: User) {
const streetInfo = user.address?.street
if (streetInfo === undefined) {
console.log('No street info')
} else {
console.log(streetInfo)
let user: User = {
name: 'O.O'
printStreet(user) // 'No street info'
空值合并是另一个 JavaScript 特性,它也可以很好地与 TypeScript 的空处理配合使用。
它允许编写在处理
null
或
undefined
时有回退的表达式。当表达式中可能出现其他 falsy 值,但这些值仍然有效时,这非常有用。
它可以与表达式中的
??
(空值合并运算符)
一起使用,类似于使用
&&
(与运算符)
。
function printName(name: string | null | undefined) {
console.log(`${name ?? '无名氏'}`)
printName(null) // '无名氏'
printName('O.O') // 'O.O'
TypeScript 的推理系统并不完美,有时候忽略一个值为
null
或
undefined
的可能性是有意义的。一个简单的方法就是使用类型转换,但是 TypeScript 也提供了
!
运算符作为方便的快捷方式。
function getValue(): string | undefined {
return 'hello'
let value = getValue()
value.length // value 可能为 undefined
// 使用 ! 运算符
value!.length // 5
就像类型转化一样,这可能是不安全的,应该小心使用。
数组边界处理
即使启用了
strictNullChecks
,默认情况下 TypeScript 也会假定数组访问永远不会返回
undefined
(除非
undefined
是数组类型的一部分)。
let array: number[] = [1, 2, 3]
let value = array[0] // value 的类型为 number
我们可以配置
noUncheckedIndexedAccess
来更改此行为。
let array: number[] = [1, 2, 3]
let value = array[0] // value 的类型为 number | undefined
null 和 undefined 都有各自的类型名称。这些类型本身没有用处,因为我们只能将 null 和 undefined 赋值给定义为 null 或 undefined 类型的变量。let u: undefined = undefinedu = 'string' // compile errorlet n: null = nulln = 43 //compile error默认情况...
本文总结一下
TypeScript
类型声明的书写,很多时候写
TypeScript
不是问题,写类型就特别纠结,我总结下,我在使用
TypeScript
中遇到的问题。如果你遇到类型声明不会写的时候,多看看lodash的声明,因为lodash对数据进行各种变形操作,所以你能遇到的,都有参考示例。
// 变量
const num: number = 1;
const str: string = 'str';
const bool: boolean = true;
const
null
s:
null
=
null
;
const undefine:
undefined
= undef
TypeScript
本质是
javascript
,因此基本上js所有的功能在ts上完全可以照搬照抄过来使用。根据ts的文档,有些我觉得值得商榷的——比如
null
,
undefined
就是例子。
文档上说一个变量如果是number,boolean等基本类型,可以为
null
或者是
undefined
。在我看来,既然TS是“强
语言
”类型,我们.
const str:string = 'a';
const boal:boolean = true;
//
undefined
or
null
을 사용할때는 단독적으로 사용하지 않는다.
// => 단독으로 사용될 경우에는
undefined
(
null
) 밖에 담지 못하게 때문에,
let age:number|undefi
01Typescript介绍 、Typescript安装、Typescript
开发
工具(15分51秒).rar
02 Typescript 中的数据类型 boolean 数字类型 number类型 string类型 array类型元组类型 (tuple)枚举类型 (enum) (上) (20分29秒).rar
03 Typescript中的数据类型 任意类型 (any)
null
和
undefined
void类型 never类型 (下) (16分6秒).rar
04 Typescript中的函数 函数的定义 可选参数 默认参数 剩余参数 函数重载 箭头函数 (31分50秒).rar
05 Typescript中的类 Es5中的类和静态方法 继承 (原型链继承、对象冒充继承、原型链+对象冒充组合继承) (20分40秒).rar
06 Typescript中的类 类的定义 继承 类里面的修饰符 (上) (29分4秒).rar
07 Typescript中的类 类中的静态属性 静态方法 抽象类 多态 (下) (27分52秒).rar
08 Typescript中的接口的用途 以及属性类型接口 (19分46秒).rar
09 Typescript中的属性类型接口【案例】 定义Ajax请求数据的接口 ts封装ajax (8分).rar
10 Typescript中的函数类型口 【案例】 加密方法约束 (5分11秒).rar
11 Typescript中的可索引接口 类类型接口 (12分2秒).rar
12 Typescript中接口扩展、接口的继承 (7分19秒).rar
13 Typescript中的泛型 泛型变量 泛型类 (22分54秒).rar
14 Typescript的泛型接口 泛型类接口 (8分42秒).rar
15 Typescript泛型类 - 把类作为参数类型的泛型类 (21分47秒).rar
16 Typescript 类型、接口、类 、泛型 综合使用--Typescript封装统一操作Mysql Mongodb Mssql的底层类库 (14分31秒).rar
17 Typescript 模块 以及模块化封装DB库 封装类似Mongoose风格的类库 (25分22秒).rar
18 命名空间 命名空间块化 (11分35秒).rar
19 装饰器定义 类装饰器 属性装饰器 装饰器工厂 (23分17秒).rar
20 装饰器 方法装饰器 方法参数装饰器 装饰器的执行顺序 (28分39秒
TS学习笔记
文章目录TS学习笔记一. 环境搭建二. 基本类型1. 类型声明2. 基本类型三. 编译选项四. Webpack + TS(一)
基础
配置1. 配置依赖2. webpack.config.js3. tsconfig.json4. 构建指令配置(二)清除旧的打包产物五. class0.
基础
使用1. 构造函数&this2. 继承3. 抽象4. 接口5. 属性封装6. 泛型
一. 环境搭建
安装Node.js
npm i -g
typescript
创建ts文件test.ts,编译:tsc
const numberArr = [1,2,3];
这时候你把鼠标放在numberArr上面可以看出,这个数组的类型就是 number 类型。这是
TypeScript
通过类型推断自己推断出来的。 如果你要显示的注解,也非常简单,可以写成下面的形式。
const numberArr: number[] = [1, 2, 3];
同样道理,如果你的数组各项是字符串,你就可以写成这样。
可
null
类型(
Null
able Types)
TypeScript
具有两种特殊的类型,
null
和
undefined
,它们分别具有值
null
和
undefined
。 默认情况下,类型检查器认为
null
与
undefined
可以赋值给任何类型。
null
与
undefined
是所有其它类型的一个有效值。 这也
public static except
Null
= (params: any): any => {
let data: any = {};
for (const item in params) {
if (params.hasOwnProperty(item)) {
if (StringUtils.isNotEmpty(params[item])) {
if (typeof params[item] === 'object') {
1.
TypeScript
提供了强类型检查,可以在
开发
过程中发现错误并进行修正,提高代码的质量和可读性。
2.
TypeScript
支持面向对象编程,包括类、接口等特性,可以更好的组织代码和实现复杂的业务逻辑。
3.
TypeScript
与
JavaScript
兼容,可以在不改变已有代码的情况下使用
TypeScript
。
1. 学习曲线较陡峭,需要对面向对象编程和类型系统有一定的了解。
2. 编译速度比
JavaScript
慢,对于小型项目可能不太明显,但对于大型项目,编译时间可能会变得很长。
总的来说,如果需要
开发
大型项目或对代码质量有较高要求,使用
TypeScript
可以提高代码的可读性和可维护性。如果是小型项目或快速原型
开发
,可以使用
JavaScript
。