热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

typescript值类型赋值约束详解

一、原始数据类型1.原始javascript基本数据类型(六种)number、string、boolean、undefined、null、symbo

一、原始数据类型

1.原始Javascript基本数据类型(六种)

number、string、boolean、undefined、null、symbol

2.布尔值类型: boolean

let isDone: boolean = false;  //ok
let isDone: boolean = Boolean(false); //ok
let isDone: boolean = new Boolean(false); //error  

3.数值类型: number

let decLiteral: number = 6;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number = 0o744;

4.字符串类型: string

let myName: string = 'Tom';

5.空值: void

function printName(): void {console.log('My name is Tom');
}//声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null:
let unusable: void = undefined;

6.空和未定义:Null和Undefined

let u: undefined = undefined;
let n: null = null;//void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:// 这样不会报错
let num: number = undefined;
// 这样也不会报错
let u: undefined;
let num: number = u;


而 void 类型的变量不能赋值给 number 类型的变量:

let u: void;
let num: number = u;// error: index.ts(2,5): error TS2322: Type 'void' is not assignable to type 'number'.


二、任意值

1.概述:如果是一个普通类型,在赋值过程中改变类型是不被允许的,但如果是 any 类型,则允许被赋值为任意类型。如下例所示:

//普通类型
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7; // index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.//任意值类型
let myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7;  // ok


2.任意值的属性和方法:

概述:声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值

//访问任何属性
let anyThing1: any = 'hello';
console.log(anyThing1.myName);
console.log(anyThing1.myName.firstName);//访问任何方法
let anyThing2: any = 'Tom';
anyThing2.setName('Jerry').sayHello();
anyThing2.myName.setFirstName('Cat');

3.未声明类型的变量

概述:变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型

let something;
something = 'seven';
something = 7; // ok something.setName('Tom'); //ok

三、类型推论

概述:如果没有明确的指定数据类型,那么TS会依照类型推论的规则推断出一个类型

//被类型推论推论成string类型
let myFavoriteNumber = 'seven';
myFavoriteNumber = 7; // error//上面的式子等价于
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7; //error

四、联合类型

概述:联合类型表示取值可以为多种类型中的一种,使用 | 分隔每个类型

//允许 myFavoriteNumber 的类型是 string 或者 number,但是不能是其他类型
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven'; // ok
myFavoriteNumber = 7; // ok
myFavoriteNumber = true; // error

1.访问联合类型的属性或者方法

概述:当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,就只能访问此联合类型的所有类型里共有的属性或方法

function getLength(something: string | number): number {return something.length; //error : property 'length' does not exist on type 'number'
}//访问 string 和 number 的共有属性是没问题的
function getString(something: string | number): string {return something.toString(); // ok
}

2.联合类型的变量赋值

概述:联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
console.log(myFavoriteNumber.length);  // 5myFavoriteNumber = 7;
console.log(myFavoriteNumber.length);  // error

 


推荐阅读
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
author-avatar
汇星创业网
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有