• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

typescript数据类型

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

ts中数据类型的定义是重点之一,所以必须明确ts有哪些数据类型

 

1.布尔类型

最基本的数据类型就是简单的true/false值,在JavaScript和TypeScript里叫做boolean(其它语言中也一样)。

let isDone: boolean = false;

注意:在js中,除了false和true.,比如:true可以用其他的数据类型的数据去替换而实现统样的效果,所以我们常常并没有特意去计较它是不是真的布尔值.比如

var a=true
if(a){
    console.log(a)
}
a=1
if(a){
console.log(a)
}

而ts中则不允许非同类型的数据进行赋值,后续的隐患就少了很多

 

2.数值(数字)类型

和JavaScript一样,TypeScript里的所有数字都是浮点数。 这些浮点数的类型是 number。 除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;

对比与js,绝大部分的数据类型转换的方式,只要等号右边的返回值是数值都可以,但并不是所有,至少有一个(true-1)不能用于给ts中的number类型变量赋值

 

3.字符串

let a:string='6'
let b:boolean=true
a=7+''
a=b.toString()

基本的转化也能拿来赋值.同时也允许模板字符串赋值

let a:string='6'
let b:string='你真是'
let c:string=`我觉得${b}${a}${a}的`

 

4.null和undefined

TypeScript里,undefinednull两者各自有自己的类型分别叫做undefinednull

let a:null=null
let b:undefined=undefined

但是,默认情况下nullundefined是所有类型的子类型.也就是说你可以把它们赋值给任何类型的数据.包括后面要讲的几种数据类型.


不是说数据类型要分清除吗?怎么到这里就不分了.这里主要是设计到几个场景,比如我定义了,但是没赋值.那我得给他一个默认值吧?无论他是什么类型的,我都给了undefined,null也是类似的初始化作用.
当然,如果你就是想明确一点,毕竟有时候null和undefined也会对项目造成不可预估的影响,也是有手段的.在编译生成js代码的时候输入下面的代码
tsc [filename] --strictNullChecks

 

5.数组

TypeScript像JavaScript一样可以操作数组元素。 有两种方式可以定义数组。 第一种,可以在元素类型后面接上 [],表示由此类型元素组成的一个数组

let list: number[] = [1, 2, 3];

第二种方式是使用数组泛型,Array<元素类型>

let list: Array<number> = [1, 2, 3];

可以明显的看出,无论哪种方式,都定义了元素的数据类型.所以,只要是符合定义的元素,无论string,number,boolean,只要是单一的类型,都是可以在数组里的.但是只要存在不符合的就报错

 

6.元组.

如果说数组是单一类型的元素组成的数组,那元祖就包括除此之外的数组

let a:[string,number];
a=['1',1]

申明与赋值规则如下

(1)定义时,每个位置上的元素数据类型都必须声明.同时赋值时要一一对应

(2)申明时的数据类型申明不会改变,所以在浅拷贝时也会先验证拷贝对象是否符合当前申明,不符合不给拷贝.

注意:官网有说可以越界查询.所有后续需要再确认一下

但我在实际试验的时候,并不能越界.具体原因后续再调查

 

7.枚举

enum类型可以用js的思路理解为一个对象,对象里的每个属性值都是这个类型的值,比如

enum Color {Red, Green, Blue}
let c: Color = Color.Green;

但是,它自己本身不能作为值被赋予

数值:具体的数值部分要讨论的情况比较麻烦,单独开一篇.这里就讲默认情况
(1)默认状态,默认从0开始,后续属性+1


8.Any(可变的,可以是任何数据类型)
有时候,有些数据类型确实是不确定的,特别是第三方的数据.有时候是数值,有时候是字符串.这时候给它一个Any类型,就可以解除编译校验,让代码顺利运行.


9.void(不能是任何类型)
一般没有返回值的函数它的返回值是void类型,不过注意,undefined和null可以作为值赋予它


10.Never(从不,没有完结的,无法到达的)
void类型是没有返回值的函数返回的,但有一个问题,假如这个函数执行不完呢?不就不知道有没有返回值了,此时void就不合适了.这个函数的返回值就是never类型的.
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
    return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
    while (true) {
    }
}

 

11.Object

object表示非原始类型,也就是除numberstringbooleansymbolnullundefined之外的类型。

使用object类型,就可以更好的表示像Object.create这样的API.

declare function create(o: object | null): void;

create({ prop: 0 }); // OK
create(null); // OK

create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error

 

12.类型断言

这个准确来说不是一种数据类型,而是类似数据转换.也就是说,你前面给某个数据定好类型了,但是后面明确了它是另一种类型,这时候就可以使用类型断言告诉ts,你不用在这里限制我了,我知道自己在做啥,我先转换,然后你再监听.在举例子之前我们先要明白一点,'访问联合类型值的属性时,这个属性必须是所有可能类型的共有属性'.什么意思呢?比如:

当创建函数的时候,val定义的数据类型是既有可能是string,又有可能是number,而number.length是错误的,不存在的.所以ts就会提醒你"程序员,你这里写的是不是有问题?"

那么这时候用类型断言,就是告诉ts,这里使用.length的时候是string类型的,我知道.换句话说,你也可以理解成一种类型选择,if(val的类型是string)就.length.

 

以上差不多就是ts的数据类型了.因为ts算是'强数据类型'.所有为了涵盖所有js中的数据类型,明显的多出来好几种数据类型.不过大类还是基础数据类型和非基础数据类型.而非基础数据类型又是建立在基础数据类型之上的,所有非基础数据类型的数据分类还是建立在基础数据类型上的.




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
TypeScriptfor循环in和of发布时间:2022-07-18
下一篇:
TypeScript真香系列——接口篇发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap