直观详细的typescript隐式类型转换图文详解
正文
1、unknown是所有类型的父类型,其他类型都可以赋值给 unknown
let a: undefined = undefined; let b: null = null; let x2: unknown; x2 = a; //正确 x2 = b; //正确
2、never 是任何类型的子类型,可以赋给任何类型
let a: undefined = undefined; let b: null = null; function err(): never { // OK throw new Error('error'); } a = err(); //正确 b = err(); //正确
3、any可以赋值给任何类型,任何类型可以赋值给any,除了any不能赋值给never(但是never却可以赋值给any)
let a: undefined = undefined; let b: null = null; let err: never; let y: any = 4; a = y; //正确 b = y; //正确 y = a; //正确 y = b; //正确 err = y ; //报错 不能将类型“any”分配给类型“never”。ts(2322)
4、子类型可以赋值给父类型。但是父类型不能赋值给子类型,必须加断言
let v: void; let a: undefined = undefined; v = a; //正确 a = v; //错误 不能将类型“void”分配给类型“undefined”。ts(2322) a = v as undefined; //正确
那么通常情况下,如果一个方法或组件的属性,定义什么类型,我们传入什么类型就完事了,为什么还要整理这张图呢?
因为我们有时,并不能非常精确的定义一个类型,我们只想把一个子类型传进入,这样它也能识别。
比如vue中:
<xx-upload :before-load="handleBeforeLoad"> //setup ts代码 let handleBeforeLoad = ()=>{ }
这样传入会报错,因为你会发现before-load传入的类型是个由命名空间定义的自定义类型。
要么你精确的传入匹配的类型
import type { UploaderBeforeRead } from "xx/lib/upload/types" let beforeRead:UploaderBeforeRead = (file:File | File[]):boolean=>{ }
要么传入一个any,接收一个any参数,因为第三条中"any可以赋值给任何类型,任何类型可以赋值给any"就可以解决。
let beforeRead:any = (file:any):boolean=>{ }
以上就是直观详细的typescript隐式类型转换图文详解的详细内容,更多关于typescript隐式类型转换的资料请关注我们其它相关文章!
相关推荐
-
TypeScript基础类型介绍
目录 1.基础类型 2.对象类型 2.1数组 2.2元组 2.3对象 3.类型推断 3.1类型联合中的类型推断 3.2上下文类型 4.类型断言 TS 的静态类型可以人为的分为两类: 基础类型:像布尔值(boolean).数字(number).字符串(string).Any(任意类型).Void(无类型).Null. Undefined.Never(无值类型) 对象类型:像数组.函数.对象.枚举.元组. 1.基础类型 TS的类型定义主要通过以下示例代码中演示的方式进行定义: ;(function
-
使用TypeScript类型注解的方法
目录 类型注解 类型推导 TS和JS共有的数据类型 TS独有的数据类型 any unknown void never tuple 函数参数和返回值 类型断言 非空类型断言 字面量 类型缩小 总结 类型注解 TypeScript提供了很多数据类型,通过类型对变量进行限制,称之为类型注解,使用类型注解后,就不能够随意变更变量的类型. 以下代码定义了一个字符串类型的变量,如果把它更改为数字类型时,代码编译阶段就会直接报错,提示 “Type ‘number’ is not assignable to t
-
TypeScript学习之强制类型的转换
前言 使用强类型变量常常需要从一种类型向另一种类型转换,通常使用ToString或ParseInt可以来实现一些简单的转换,但是有时候需要像.NET语言中那样将一种类型显示的转换为另一种类型,在TypeScript规范中,被称为"类型断言",它仍然是类型转换,只是语法是有些不同.下面来详细看看TypeScript的强制类型转换. TypeScript强制类型转换 在 TypeScript 中将一个 number 转换成 string ,这样做会报错: var a:number = 12
-
详解TypeScript使用及类型声明文件
目录 简介 Script 与 Vue3 defineProps 与 Typescript defineEmits 与 Typescript ref 与 Typescript computed 与 Typescript 事件对象 与 Typescript 模板 Ref 与 Typescript 可选链操作符 非空断言-TS TypeScript类型声明文件 基本介绍 内置类型声明文件 第三方库类型声明文件 自定义类型声明文件 简介 声明文件是以.d.ts为后缀的文件,开发者在声明文件中编写类型声明
-
详解 TypeScript 枚举类型
目录 1. 数字枚举 2. 字符串枚举 3. 反向映射 4. 异构枚举 5. 常量枚举 6. 枚举成员类型和联合枚举类型 (1)枚举成员类型 (2)联合枚举类型 7. 枚举合并 前言: TypeScript 在 ES 原有类型基础上加入枚举类型,使得在 TypeScript 中也可以给一组数值赋予名字,这样对开发者比较友好,可以理解枚举就是一个字典. 枚举类型使用enum来定义: enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, F
-
你不知道的 TypeScript 高级类型(小结)
前言 对于有 JavaScript 基础的同学来说,入门 TypeScript 其实很容易,只需要简单掌握其基础的类型系统就可以逐步将 JS 应用过渡到 TS 应用. // js const double = (num) => 2 * num // ts const double = (num: number): number => 2 * num 然而,当应用越来越复杂,我们很容易把一些变量设置为 any 类型,TypeScript 写着写着也就成了 AnyScript.为了让大家能更加深入
-
直观详细的typescript隐式类型转换图文详解
正文 1.unknown是所有类型的父类型,其他类型都可以赋值给 unknown let a: undefined = undefined; let b: null = null; let x2: unknown; x2 = a; //正确 x2 = b; //正确 2.never 是任何类型的子类型,可以赋给任何类型 let a: undefined = undefined; let b: null = null; function err(): never { // OK throw new
-
JavaScript中运算符规则和隐式类型转换示例详解
前言 本文主要给大家介绍了关于JavaScript运算符规则和隐式类型转换的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 隐式类型转换 在 JavaScript 中,当我们进行比较操作或者加减乘除四则运算操作时,常常会触发 JavaScript 的隐式类型转换机制:而这部分也往往是令人迷惑的地方.譬如浏览器中的 console.log 操作常常会将任何值都转化为字符串然后展示,而数学运算则会首先将值转化为数值类型(除了 Date 类型对象)然后进行操作. 我们首先来
-
c++显式类型转换示例详解
标准C++包含一个显式的转换语法: static_cast:用于"良性"和"适度良性"的转换,包括不用强制转换 const_cast:用于"const"和/或"volatile"进行转换 reinterpret_cast:转换为完全不同的意思.为了安全的使用它,关键必须转换回原来的类型.转换成的类型一般只能用于位操作,否则就是为了其他隐秘的目的.这是所有转换中最危险的. dynamic_cast:用于类型安全的向下转换 ---
-
通过字节码看java中this的隐式传参详解
前言 从字节码看java中 this 隐式传参具体体现(和python中的self如出一辙,但是比python中藏得更深),也发现了 static 与 非 static 方法的区别所在! static与非static方法都是存储java的方法区.在static 方法中,没有this引用,因此无法使用当前类中所定义的变量,而非static方法则会默认传入this. 概述 this关键字,是一个隐式参数,另外一个隐式参数是super. this用于方法里面,用于方法外面无意义. this关键字一般用
-
MySQL的隐式类型转换整理总结
前言 前几天在看到一篇文章:价值百万的 MySQL 的隐式类型转换感觉写的很不错,再加上自己之前也对MySQL的隐式转化这边并不是很清楚,所以就顺势整理了一下.希望对大家有所帮助. 当我们对不同类型的值进行比较的时候,为了使得这些数值「可比较」(也可以称为类型的兼容性),MySQL会做一些隐式转化(Implicit type conversion). 比如下面的例子: mysql> SELECT 1+'1'; -> 2 mysql> SELECT CONCAT(2,' test'); -
-
总结Javascript中的隐式类型转换
JavaScript的数据类型分为六种,分别为null,undefined,boolean,string,number,object.object是引用类型,其它的五种是基本类型或者是原始类型. 比如像是Number() ,还是parseInt() .parseFloat()都属于显示类型转换(强制类型转换): 这一节我们来看一下隐式类型转换(自动转换). 数值自动转换为字符串 var a = 123; alert(a+'456'); // 输出 123456 "+"号为连接符 字符串
-
浅析JavaScript中的隐式类型转换
如果把通过函数或方法调用,明确的将某种类型转换成另一种类型称为显示转换 ,相反则称为隐式类型转换 .google和维基百科中没有找到"显示类型转换","隐式类型转换"的字眼.暂且这么称呼. 一. 运算中存在的隐式类型转换 1, "+"运算符 复制代码 代码如下: var a = 11, b = '22'; var c = a + b; 这里引擎将会先把a变成字符串"11"再与b进行连接,变成了"1122".
-
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
一般存在四种情况,JavaScript会对变量的数据类型进行转换. 目录 * if中的条件会被自动转为Boolean类型 * 会被转为false的数据 * 会被转为true的数据 * 参与+运算都会被隐式的转为字符串 * 会被转为空字符串的数据 * 会被转为字符串的数据 * 会被转为数据类型标记的数据 * 参与*运算都会被隐式的转为数字 * 会被转为0的数据 * 会被转为1的数据 * 会被转为NaN的数据 * == 运算符 * 为true的时候 * 为false的时候 if中的条件会被自动转为B
-
JavaScript隐式类型转换
JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加.之所以不同的数据类型之间可以做运算,是因为JavaScript引擎在运算之前会悄悄的把他们进行了隐式类型转换的,如下是数值类型和布尔类型的相加: 复制代码 代码如下: 3 + true; // 4 结果是一个数值型!如果是在C或者Java环境的话,上面的运算肯定会因为运算符两边的数据类型不一致而导致报错的!但是,在JavaScript中,只
-
c++隐式类型转换示例分享
复制代码 代码如下: /*=============================================================================# FileName: explicit_try.cc# Desc: 验证含有一个参数的非explicit构造函数是否可以拷贝初始化=============================================================================*/#in
随机推荐
- Laravel使用memcached缓存对文章增删改查进行优化的方法
- Mongodb中MapReduce实现数据聚合方法详解
- VirtualBox配置虚拟网卡(桥接)——实现主机-虚拟机网络互通
- oracle插入字符串数据时字符串中有'单引号问题
- 解析thinkphp基本配置 convention.php
- Android NDK开发简单程序分享(Hello Word!)
- Mysql数据库之主从分离实例代码
- 基于javascript的在火狐里面强制换行字符
- jquery 跨域访问问题解决方法(笔记)
- jQuery中Ajax的load方法详解
- jquery如何获取复选框的值
- JS获取鼠标相对位置的方法
- IE:启动系统的分级审查功能
- Java NIO和IO的区别
- batchcollect pagecollect来自官方杰奇jieqi定时采集配置方法参数详解第1/2页
- 解析C#设计模式编程中适配器模式的实现
- 浅析C++中cout的运行机制
- C语言对组文件处理的相关函数小结
- CSS文件可维护、可读性提高指南第1/2页
- OSPF与EIGRP的比较