布尔值是最基础的数据类型,在 TypeScript 中,使用 boolean 定义布尔值类型: 以下都编译通过的,并且给出了说明,一句话总结,是什么类型就要赋值给什么类型,这句话够俗了吧 正确的写法 /...void function alertName(): void { alert('My name is Tom'); } //声明一个 void 类型的只能将它赋值为 undefined 和 null...,null 类型的变量只能被赋值为 null let u: undefined = undefined; let n: null = null; 错误的写法 注意:正确的很好记,大多数人都会写正确的,关键是要记住这些错误的...void function alertName(): void { return 666; } //声明一个 void 类型的只能将它赋值为 undefined 和 null let unusable...; // 变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型: let any; any =true; 错误的写法 没有错误的写法~ 类型推论 正确的写法 // 如果没有明确的指定类型,那么
//明确的表示a的类型是any —— 显式的any let a: any //以下对a的赋值,均⽆警告 a = 100 a = '你好' a = false //没有明确的表示b的类型是any,但TS主动推断了出来...—— 隐式的any let b //以下对b的赋值,均⽆警告 b = 100 b = '你好' b = false 注意点: any 类型的变量,可以赋值给任意类型的变量 /* 注意点:any类型的变量...demo():never{ throw new Error('程序异常退出') } 4.5. void void 的含义是: 空 或 undefined ,严格模式下不能将 null 赋值给 void...1,3,5,7,9] a = function(){} // 以下代码,是将【原始类型】赋给a,有警告 a = null // 警告:不能将类型“null”分配给类型“object” a = undefined.../ 类型“{ name: string; }”的参数不能赋给类型“Demo”的参数 test('123') test({name:'张三',length:10}
问题: 出现错误:类型“{ class: string; }”的参数不能赋给类型“ComponentPublicInstanceConstructorany) => any)>(source: T, c…”的参数。...不能将类型“{ class: string; }”分配给类型 解决办法一: props: { style?: unknown; readonly hoverClass?
[] Null、Undefined和Never是其它类型的子类型,因此可以赋值给任何其它类型变量 (摘自基本类型_TypeScript笔记2) 也就是说,要确定数组类型的话,先要确定每个元素的类型,再考虑其兼容关系...不兼容任何其它类型 Void兼容Undefined和Null 其它类型都兼容Never和Void P.S.兼容可以简单理解可否赋值(文末有严谨描述),例如: let x: any; let y: number...; let z: null;// Any兼容Number x = y; // Number兼容Null y = z; // Null不兼容Number // 错误 Type 'number' is not...,以确保类型安全,因此: // 把父类型赋值给子类型,在逆变的场景中是安全的 dogComparer = animalComparer; // Ok // 把子类型赋值给父类型,在逆变的场景(函数类型...虽然从类型系统的角度来看不安全,但在实际应用中是一种相当常见的“模式”,例如用不确定的参数调用回调函数: function invokeLater(args: any[], callback: (...
: string): Date | string; } /* 不能将类型 "(type: any,timestamp: any) => string | Date" 分配给类型 "IGetDate"。...不能将类型 "string | Date" 分配给类型 “string”。 不能将类型 "Date" 分配给类型 “string"。...) => any[]; /* 不预先指定具体的类型,而在使用的时候再指定类型的一种特性 */ type IGetRepeatArrR = (target: T) => T[]; /* 泛型接口..."number” 的参数不能赋给类型"string" 的参数 */ getStrArr(123); /* 泛型参数默认类型 */ type IGetRepeatArr = (...“string"的参数不能赋给类型"number" 的参数 */ getRepeatArr('123'); # 类型别名 & 类型断言 /* 通过 type 关键字定义了 I0bjArr 的别名类型
默认情况下,它们是所有类型的子类型。这意味着你可以把 null和undefined赋值给 number类型的变量。...然而,当你指定了--strictNullChecks标记,null和undefined只能赋值给void和它们各自的类型: let u: undefined = undefined; let n: null...= null; Any 当你不确定一个变量应该是什么类型的时候,你可能需要用到 any 类型。...unknown类型的变量只能被赋值给any类型和unknown类型本身: let value: unknown; value = true; // OK value = 42;...; 通常情况下,我们不会这样使用void类型,因为除了undefined和null之外,你不能将任何值赋给void类型的变量。
如上图,可以说Ts是Js的超集。 定义类型的好处 如下,我想求和a和b,但是又错误的给a赋值了'sk',那么c的值就成了拼接字符串的结果。...function sum(a+b){ return a+b } 函数参数类型声明 我们给参数类型声明为数值,如果我们传参时赋值了字符串,就会报错。...不建议使用。这种情况是 显示的any let no_use : any 而在定义变量时,不赋值,就是 隐式any 。Ts检测到没有指定类型,然后给添加类型为any。 let d; !!!!!...let e:unknown e = 12 e ='sss' any和unknown的区别 如下,any类型的值可以赋值给字符串。...let str:string let e:unknown e ='sss' str = e unknown类型实际上是一个类型安全的any,unknown类型的变量不能赋值给其他变量 unknown类型赋值给
类型“number”不能分配给类型"string"的参数....any类型 "strictNullChecks": true, // 不允许把null、undefined赋值给其他类型的变量 "strictFunctionTypes": true, // 不允许函数参数双向协变...undefined = undefined let n: null = null 注意 有一个点需要注意一下 let isOk: boolean = new Boolean('') 这样也会抛出错误不能将类型...true 抛出错误不能将类型“number”分配给类型“string”。...' 抛出错误不能将类型“string”分配给类型“number”。
void的内容也是不能去赋值给别人的//某种程度上来说,void 类型像是与 any 类型相反,它表示没有任何类型。...就是说你可以把 null 和 undefined 赋值给其他类型。...// null和undefined赋值给stringlet str:string = "666";str = nullstr= undefined// null和undefined赋值给numberlet...赋值给booleanlet isDone: boolean = false;isDone = nullisDone= undefined// null和undefined赋值给bigintlet big...只能赋值给 void 和它们各自的类型。
// 1、类型断言 —— 不飘红,但执行时可能错误 (value as Number).toFixed(2); // 2、类型守卫 —— 不飘红,且确保正常执行 if (typeof...bottom type 由于 never 是 typescript 的唯一一个 bottom type,它能够表示任何类型的子类型,所以能够赋值给任何类型: let err: never; let num...; ne = nev; // 正确,只有 never 可以赋值给 never 上面的例子基本上说明了 null/undefined 跟 never 的区别,never 才是最 bottom 的。...从上文我们知道,除了 never 自身,没有任何类型能赋值给 never。any 是否满足这个特性呢?...不可否认的是,never 这个东西很奇妙,从集合论的角度,它是一个空集合,因此它可以通过空集合的一些特性,为我们的类型运算工作带来很大便利。
{} // foo, bar 都会被推导为 any 类型 any 类型的变量几乎无所不能,它可以在声明后再次接受任意类型的值,同时可以被赋值给任意其他类型的变量: let anyVal: any =...any 类型的万能性会导致其被经常滥用,需要注意: 如果是类型不兼容报错导致要使用 any,考虑使用类型断言代替 如果是类型太复杂导致不想全部声明要使用 any, 考虑去将这里的类型去断言为需要的最简类型...如果是要表达一个未知类型,考虑使用 unknown 类型 # unknown unknown 类型的变量可以再次赋值为任意其他类型,但注意只能赋值给 any 或 unknown 类型的变量: let...unknownVal; // Error unknown 和 any 的主要差异体现在赋值给别的变量时,any 把所有类型都兼容,而 unknown 在期待一个确定的值。...和 null、undefined 一样,是所有类型的子类型,但只有 never 类型的变量可以赋值给另一个 never 类型的变量。 通常不会显式声明一个 never 类型,它主要被类型检查所使用。
**所有类型都可以赋值给any,也可以赋值给unknown**。...any类型能被赋值给任意类型(any、unknown、number等,unknown类型只能被赋值给unknown、any类型) // unknown let myunknown: unknown let...void,但void不能赋值给undefined void类型不能赋值给undefined这是符合正常的情况的:即只能赋值给自己和any类型 function sayHello(): void {...但是,有例外情况:undefined可以被赋值给void const s1: undefined = undefined const s2: void = undefined 顺带提一下:null和undefined...上面的例子中,else分支的nickname会被收窄为boolean类型,而boolean类型无法被赋值给never类型,所以会出现编译错误,就能够提前检测出错误,避免很多没必要的问题。
未来兼容性 随着 ECMAScript 的更新而更新 需要更新 TypeScript 以支持新特性 TypeScript 本身不执行任何代码,只是添加了一个类型系统,用于在编译时提供类型安全和错误检查...上述示例,myName 的类型是字符串 ligang。后续只能赋值为 ligang,赋值为其他字符串就会报错。 使用 let/const 声明的变量,如果没有注明类型,就会推断该变量是值类型。...let myName = 'ligang'; myName = true; // 不能将类型“boolean”分配给类型“string” ⚠️ 如果赋值为对象,会推断既有属性。...any|never|unkown 值 说明 any 表示没有任何限制,可以赋予任意类型的值 unkown 表示任何值,可以赋值为各种类型的值;只有明确unknown变量的实际类型,才允许使用它 never...表示空,不包含任何值,可以赋值给任意其他类型 any 类型 只有为了适配老的 JavaScript 项目,让代码快速迁移到 Typescript, 可以把变量设置为 any,其他场景应该尽量避免使用
TypeScript中有两种顶端类型: any unknown any 类型允许执行任意操作而不会产生编译错误(但运行时候也可能出现错误),通常用于跳过类型检查: const a: any = 0; a.length...类型任何其他类型都可以赋值给 unknown ,但是unknown类型的值只能赋值给 unkonwn 和 any,而且 unknown 不允许执行绝大多数的操作: let a: unknown = 0...由于它是所有类型的子类型,所以它可以赋值给任何类型,但是其他类型都不能赋值给它,包括 any。...let a: never; // OK let b: boolean = a; // OK 它可以赋值给任何类型 let c: any = 1; a = c; // Error 其他类型不能赋值给它 a...由于元组类型是数组的子类型所以元组类型可以赋值给数组类型,前提是元组中的每一项都符合数组的每一项类型;数组类型是不能赋值给元组类型的。
,举个 let fibonacci: number = [1,2,3,4] fibonacce.push(true) 这样写也不行,会抛出错误不能将类型“number[]”分配给类型“number”...类数组 类数组不能用数组定义的方式去赋值,举个 function sum() { let args: number[] = arguments; } 这样写会抛出错误类型“IArguments...(item)) } 类型断言 用于手动指定一个值的类型 基本语法 (推荐) 值 as 类型 or (不推荐) 类型> 值 用途 将一个联合类型断言为其中一个类型 TypeScript不确定一个联合类型的变量到底属于哪个类型的时候...是number类型,是没有length属性的,所以TypeScript给了提示类型“number”上不存在属性“length”。...但是有时候我们的写法是完全没有问题的,比如: window.foo = 1 在js中,这种写法完全ok,给window添加属性foo,值为1,但是,在TypeScript中是不支持的,它会抛出这个错误类型
fun main() { val anys: CupAny> = Cup() // 编译错误,类型不匹配 val nothings: Cup = Cup(...b: Cup = Cup() // 逆变之后,父类泛型是子类泛型的子类,子类可以赋值给父类 } 下图演示了这种型变的关系: image.png 函数类型 Kotlin 中,函数类型也是型变的...: Box = garage // 因为支持逆变,这里可以赋值给子类泛型 val boat: Boat = garage.value // 如果 1 是支持的话,这里赋值也是支持的...译者注: 在 Java 中只有使用处型变 总结 Kotlin 有强大的泛型类型,并且支持使用声明处型变以及使用处型变 默认的类型参数是不型变的 out 修饰符可以使类型参数协变 in 修饰符可以使类型参数逆变...在 Kotlin 中 List 和 Set 是协变的,MutableList,MutableSet,MutableMap 是不型变的 函数类型的参数类型是逆变的,函数类型的返回类型是协变的 协变的类型参数
fun main() { val anys: CupAny> = Cup() // 编译错误,类型不匹配 val nothings: Cup = Cup(...b: Cup = Cup() // 逆变之后,父类泛型是子类泛型的子类,子类可以赋值给父类 } 下图演示了这种型变的关系: [variance.png] 函数类型 Kotlin...: Box = garage // 因为支持逆变,这里可以赋值给子类泛型 val boat: Boat = garage.value // 如果 1 是支持的话,这里赋值也是支持的...译者注: 在 Java 中只有使用处型变 总结 Kotlin 有强大的泛型类型,并且支持使用声明处型变以及使用处型变 默认的类型参数是不型变的 out 修饰符可以使类型参数协变 in 修饰符可以使类型参数逆变...在 Kotlin 中 List 和 Set 是协变的,MutableList,MutableSet,MutableMap 是不型变的 函数类型的参数类型是逆变的,函数类型的返回类型是协变的 协变的类型参数
any(任意类型)声明变量类型为any时编译时会绕过所有类型的检测,直接通过编译阶段的检查可以任意访问属性的方法和属性any类型可以赋值给任意类型如果变量初始没有定义类型,默认为any;经过赋值后,TS...类型,any类型可以赋值给任意类型unknown,never 都不允许执行变量的方法以及访问内部属性在unknown没有被断言或细化到一个确切类型之前,unknown不可以赋值给其它类型,除了它自己和any...类型的变量let testValue1: unknown = unknownValue;//赋值给any类型的变量let testValue2: any = unknownValue;错误示范://赋值给...= null;never(不存在的值类型)never类型表示永不存在的值的类型。...即使any类型也不可以赋值给never类型。返回类型为never的函数中,其终点必须是不可执行的,例如函数过程中抛出了错误或者存在死循环。
相关React实战视频讲解:进入学习函数类型函数类型不建议直接给 Function 类型,有明确的参数类型、个数与返回值类型最佳。...return null;}看看 useEffect接收的第一个参数的类型定义。// 1. 是一个函数// 2. 无参数// 3. 无返回值 或 返回一个清理函数,该函数类型无参数、无返回值 。...return null;}同理,async 处理异步请求,类似传入一个 () => Promise 与 EffectCallback 不匹配。...;同理工具类型 Parameters 也能推断出函数参数的类型。...R : any; 的意思是 T 能够赋值给 (...args: any) => any 的话,就返回该函数推断出的返回值类型 R。defaultProps默认值问题。
函数类型 函数类型不建议直接给 Function 类型,有明确的参数类型、个数与返回值类型最佳。...return null; } 看看 useEffect接收的第一个参数的类型定义。 // 1. 是一个函数 // 2. 无参数 // 3....return null; } 同理,async 处理异步请求,类似传入一个 () => Promise 与 EffectCallback 不匹配。...}; 同理工具类型 Parameters 也能推断出函数参数的类型。...R : any; 的意思是 T 能够赋值给 (...args: any) => any 的话,就返回该函数推断出的返回值类型 R。 defaultProps 默认值问题。