为了面向ng2和前端未来,开始搞向ts,ts是微软出的一枚语言,作为es6的超集,他出的一些特性还是蛮好用的(略坑)。对于我等纯前端(从开始就接触javascript)的人来说,真想说,这特么什么鬼。部分特性同es6(个人对es6还是蛮有好感的)。ts同期的coffeescript,将js python化,ts也把js搞的向其他语言靠拢。。

中文学习,这里是英文学习。如果不想看这些东西,那看我笔记学吧。哈哈。

ts的基础类型,布尔值,数字,字符串,数组,元组(Tuple),枚举,任意值,空值。后面几个你不知道的就是新加的类型。看他们怎么定义。

ts定义有Interface,熟悉其他语言可能知道,这为类型的安全。布尔值定义为

let isDone: boolean = false;

数字为,需要注意的是它还支持了es6的2进制和8进制。

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

字符串,

let name: string = "bob";
name = "smith";

还支持es6的模版定义的形式(不懂es6的看阮一峰的es6入门)

let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }. I'll be ${ age + 1 } years old next month.`;

数组可以

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

也可以

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

两种方式。

其实看一下前面这些js原有的类型,定义的时候只是多了一个:类型,如果变量赋值的时候类型不对,编译器就会报错。类型安全orz。(写惯js的我看着不习惯)。编译后的js里面还是原来的类型定义。

下面看新类型

元组:

// Declare a tuple type
let x: [string, number];
// Initialize it
x = ['hello', 10]; // OK
// Initialize it incorrectly
x = [10, 'hello']; // Error

这个元组就是约定类型的已知数量的数组。x[0]是string类型,x[1]是number类型,只要不是编译器就报错。

console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'

这里用x[1]是数字类型,没有substr,就报错了。

x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型

console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString

x[6] = true; // Error, 布尔不是(string | number)类型

当越界访问的时候,这个东西可以是string | number,别的都报错。如上。

枚举

enum类型是对JavaScript标准数据类型的一个补充。

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

先看一下编译器编译的js的Color是什么

这里定义的c是Color类型,赋值为Color.Green,看上面的图,就知道是1。当你取Color[1]的时候也就是Green。

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

这样都可以。那么对应的序号也会相应的改变。

任意值(any)

当你不知道一个变量是啥类型,这个类型检测就没必要了吧。

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

那定义这个any就会跳过编译器的检测。

你可能认为Object有相似的作用,就像它在其它语言中那样。 但是Object类型的变量只是允许你给它赋任意值 -- 但是却不能够在它上面调用任意的方法,即便它真的有这些方法:

let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check) let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.

定义数组,数组里面类型不同的时候也该用any

let list: any[] = [1, true, "free"];

list[1] = 100;

空值

它表示没有任何类型,就像其他语言里的void,来表示这个函数不返回值。

function warnUser(): void {
alert("This is my warning message");
}

声明一个void类型的变量没有什么大用,因为你只能为它赋予undefined和null:

let unusable: void = undefined;

类型断言

类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用

一种是

let someValue: any = "this is a string";

let strLength: number = (<string>someValue).length;

还有一种写法是

let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;

两种形式是等价的。当然在jsx里面用第一种就不行了。

Typescript学习笔记(一)基础类型的更多相关文章

  1. TypeScript学习笔记之基础类型

    从今天开始学习typescript了,记录ts学习点滴,最后,使用ts结合nodejs开发后端应用,一起共勉吧: typescript最新版本2.6,所有演示代码均基于此版本 开始之前确定安装了如下n ...

  2. TypeScript学习笔记之接口类型

    TypeScript的接口,个人理解就是一种约束,包括各种类型的契约或者代码定义上的契约.当然,和java中的用法基本一致,接口可以被继承也可以被实现. 定义一个简单的interface interf ...

  3. TS学习笔记----(一)基础类型

    布尔值: boolean let isDone: boolean = false; 数字: number 和JavaScript一样,TS里的所有数字都是浮点数. 支持十进制和十六进制字面量,TS还支 ...

  4. JDK7学习笔记之基础类型

    printf()的基础用法: 变量的基础用法: 字符的输出:

  5. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  6. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  7. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  8. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  9. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  10. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. React Native之本地文件系统访问组件react-native-fs的介绍与使用

    React Native之本地文件系统访问组件react-native-fs的介绍与使用 一,需求分析 1,需要将图片保存到本地相册: 2,需要创建文件,并对其进行读写 删除操作. 二,简单介绍 re ...

  2. [转帖] BMC安全隐患

    BMC再现漏洞,裸金属云服务器岌岌可危 https://zhuanlan.kanxue.com/article-8006.htm 之前有vt-x 可能有隐患 现在看起来BMC 也就是IPMI 也有隐患 ...

  3. jenkins 邮箱设置

    一.先设置管理员邮箱地址 二.设置邮箱

  4. WPF通过DynamicResource实现给界面动态更换皮肤

    在我们的程序中有时候需要去实现动态更换皮肤的效果,从而完成一些个性化的设置,那么我们究竟怎样去实现动态换皮肤的效果呢?那么我们经常用到的就是设置不同的Style,并且在主程序的xaml文件中通过Dyn ...

  5. flask Django保存session区别

    '''Django中,session保存在服务端的数据库中,数据库中保存请求用户的所有数据,服务端数据中{'随机字符串':加密后的客户相关信息}请求完成后,把随机字符串作为值,返回给客户端,保存在客户 ...

  6. redis.clients.jedis.exceptions.JedisDataException :READONLY You can't write

    分布式直连同步调用测试时出现的错误:主从复制架构下,默认Slave是只读的,如果写入则会报错: redis.clients.jedis.exceptions.JedisDataException: R ...

  7. EFI Windows 7 activition

    mountvol X: /s copy SLIC.aml X:\EFI\CLOVER\ACPI\WINDOWS BOOTICE X:\EFI\CLOVER\CLOVERX64.efi slmgr -i ...

  8. Spring Boot 构建电商基础秒杀项目 (六) 用户登陆

    SpringBoot构建电商基础秒杀项目 学习笔记 userDOMapper.xml 添加 <select id="selectByTelphone" resultMap=& ...

  9. 创建一个UWP 打包签名

    Create a certificate for package signing 2017/2/8 3 min to read [ Updated for UWP apps on Windows 10 ...

  10. Python中数字之间的进制转换

    Python中的数据转换 在python中可以通过内置方法进行相应的进制转换,但需记得转化成非十进制时,都会将数字转化成字符串 转化成二进制 a = 10 #声明数字,默认十进制 b = bin(a) ...