总目录

从C#到TypeScript - 类型

TypeScript和C#一样是微软搞出来的,而且都是大牛Anders Hejlsberg领导开发的,它们之间有很多共同点,现在尝试以C#程序员的角度来理解下TypeScript。

TypeScript一门是JavaScript的超集语言,除了支持最新的JS语法外,TypeScript还会增加一些其他好用的语法糖,最重要的是它在兼顾JavaScript灵活的基础上增加了强类型系统,这样更友好的支持开发大型系统。

现在来看下TypeScript基础类型:

数值

C#的数字类型有好几种:int, long, float, double, byte等,而TypeScript和JavaScript一样,所有的数字都是浮点数,都是用number表示,这样也省了很了事,少了C#里类似longint overflow问题。

下面用不同进制方式显示数字20。

let num = 20;       // 10进制
let num = 0xa4; // 16进制
let num = 0b10010; // 2进制
let num = 0o24; // 8进制

布尔

boolean,和C#的功能一样,不多说。

let isCheck: boolean = true;

枚举

enum,大家都知道javascript没有enum,这也是TypeScript为此作的补充。功能上和C#差不多:

  1. 目的都是为数值提供一个友好的名字,增加代码可读性和可重构性
  2. 默认情况下从0开始编号
  3. 也可以手动赋值
  4. 可以实现类似C# Flag特性

    但也有一些细节不一样:
  5. C#的枚举值toString()会返回枚举的文本值,而TypeScript是数值
  6. TypeScript可以通过数值下标取得枚举字符串值
enum Action{
add = 1,
edit = 2,
del = 4,
all = add | edit | del
} console.info(Action.add); // 返回1
console.info(Action.add.toString()); // 返回1
console.info(Action[1]); // 返回"add"
console.info(Action[3]); // 返回undefined
console.info(Action.all); // 返回7
console.info(Action.all & Action.add) //返回1

上面的Action编译成JavaScript的结果:

var Action;
(function (Action) {
Action[Action["add"] = 1] = "add";
Action[Action["edit"] = 2] = "edit";
Action[Action["del"] = 4] = "del";
Action[Action["all"] = 7] = "all";
})(Action || (Action = {}));

字符串

字符串也基本和C#一样,不过由于是JavaScript的超集,所以当然也支持单引号。

C#6.0里的模板字符串语法糖$"this is {name}'s blog"在TypeScript里也有类似的支持,当然,这也是ES6的规范。

let name: string = 'brook';
let note: string = `this is ${name}'s blog`;

Symbol

这也是ES6的特性,用来当作唯一的标识,所有新建出来的Symbol都是不同的,不管传进去的值是否一样。

Symbol非常适合做唯一key。

let key1 = Symbol('key');
let key2 = Symbol('key'); console.info(key1 === key2); // return false

any

这个和C#的dynamic很相似,可以代表任何东西且在上面调用方法或属性不会在编译时期报错,当然也本来就是JavaScript最基本的东西。

let test: any = 'test';
test = false; test.test(); //编译时期不会有报错
let arr: any[] = ['test', false];

void、null、undefined和never

void和C#的一样,表示没有任何东西。

nullundefined和JavaScript一样,分别就是它们自己的类型,个人觉得这两者功能有点重合,建议只使用undefined

never是TypeScript引进的,个人觉得是一种语义上的类型,用来表示永远不会得到返回值,比如while(true){}throw new Error()之类。

function test(): void{} //  void
let a: string = null; let b: null = null; // null有自己的类型,并且默认可以赋值给任何类型(除never之外),可用--strictNullChecks标记来限制这个功能
let a: string = undefined; let b: undefined = undefined; // undefined, 同上
function error(): never{ // never
throw new Error('error');
}

数组

有基本的数组:

let arr: string[] = ['a', 'b', 'c'];

也有类似C#的泛型List

let list: Array<string> = ['a', 'b', 'c'];

数组功能没C#配合linq那么强大,不过配合其他一些库如lodash也可以很方便的进行各种操作。

数组还可以利用扩展操作符...来把数组解开再放入其他数组中。

let arr: number[] = [1, 2, 3];
let newArr: number[] = [...arr, 4, 5];
console.info(newArr); // 1, 2, 3, 4, 5

元组

C#也有个鸡肋的Tuple,不好用,不过新版的Tuple好像已经在C#7.0的计划当中。

下面这段代码是C#7.0的,真方便,不用再new Tuple<>,item1, item2之类的。

(string first, string middle, string last) LookupName(long id)
{
return (first:'brook', middle:'', last:'shi');
} var name = LookupName(id);
console.WriteLine(`first:${name.first}, middle:${name.middle}, last:${name.last}`);

TypeScript里的也不输给C#,不过叫法上是分开的,这里的元组只是对数组的处理,另外还有对象上的叫解构赋值,以后会写。

let tuple: [number, string] = [123, '456'];
let num = tuple[0]; //num
let str = tuple[1]: //string tuple[3] = '789'; //可以,越界后会以联合类型来判断,后面会讲联合类型
tuple[4] = true; //不行

这一篇主要就讲这些基本类型,下一篇会讲TypeScript的高级类型。

从C#到TypeScript - 类型的更多相关文章

  1. 转载 《TypeScript 类型定义 DefinitelyTyped》

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  2. TypeScript 类型推导及类型兼容性

    类型推导就是在没有明确指出类型的地方,TypeScript编译器会自己去推测出当前变量的类型. 例如下面的例子: let a = 1; 我们并没有明确指明a的类型,所以编译器通过结果反向推断变量a的类 ...

  3. CesiumJS新增官方TypeScript类型定义

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 在当前的1.70版本中,CesiumJS现在附带了正式的Type ...

  4. 玩转TypeScript(2) --简单TypeScript类型

    通过TypeScript的Module和Class,TypeScript提供了相对于javaScript更加清晰的代码构造,相较于javaScript的.js满天飞的代码,用TypeScript,你可 ...

  5. TypeScript - 类型声明、枚举、函数、接口

    目录  可定义的类型  类型声明  枚举  函数  接口 可定义的类型 以下所写的并不代表typescript的数据类型,而是在使用过程中可以用作定义的类型 number : 数值类型: string ...

  6. TypeScript类型检查机制

    类型推断 指不需要指定变量的类型,TS编译器可以根据某些规则自动推断出类型. 什么时候会有类型推断? 声明变量时没有指定类型 函数默认参数 函数返回值 ...... let a; // 这时自动推断为 ...

  7. Typescript - 类型断言

    原文:TypeScript基本知识点整理 零.序言 类型断言,可以用来手动指定一个值的类型. 给我的感觉,和 java 中的强制类型转换很像. 常常和联合类型配合使用,如: // 错误示例 funct ...

  8. 细说Typescript类型检查机制

    上一篇文章我介绍了Typescript的基础知识,回顾一下,有基础数据类型.数组.函数.类.接口.泛型等,本节内容将述说一下Typescript为方便我们开发提供了一些类型检查机制. 类型检查机制 类 ...

  9. TypeScript 类型定义文件(*.d.ts)自动生成工具

    在开发ts时,有时会遇到没有d.ts文件的库,同时在老项目迁移到ts项目时也会遇到一些文件需要自己编写声明文件,但是在需要的声明文件比较多的情况,就需要自动生产声明文件.用过几个库.今天简单记录一下. ...

随机推荐

  1. python读取文件操作.CSV

    #-*- encoding:utf-8 -*- import numpy as np import pandas as pd def test(): # header=0,表示文件第0行为列索引 # ...

  2. 1101 Quick Sort

    There is a classical process named partition in the famous quick sort algorithm. In this process we ...

  3. 闭合浮动的方法css

    浮动是一个有意思(你也可以说它很麻烦)的CSS属性,任何元素设置了浮动,层级就提高了,会影响它后面没设置浮动的元素,这些倒霉的被影响者会跑到浮动层的下面去(当然IE6.IE7除外),那解决方法呢? 常 ...

  4. sys/time.h 和 time.h

    今天在燕麦工作第二天.看荣哥给我的程序,发现程序里面用的延时跟我以前使用的不同.导入两个头文件,然后用函数来获得时间.关于这个函数特别查来一下. time.h  是ISO C99 标准日期头文件. s ...

  5. codeforces 879c

    C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  6. RxSwift学习笔记6:Subjects/PublishSubject/BehaviorSubject/ReplaySubject/Variable

    // 从前面的几篇文章可以发现,当我们创建一个 Observable 的时候就要预先将要发出的数据都准备好,等到有人订阅它时再将数据通过 Event 发出去. // 但有时我们希望 Observabl ...

  7. 团队项目第6周 - Alpha阶段项目复审 - 天冷记得穿秋裤队

    团队项目第六周 - Alpha阶段项目复审 - 天冷记得穿秋裤队 经小组讨论得出以下排名 小组 优点 缺点,bug报告 最终名次 冲鸭队 一款融合了2048和俄罗斯方块的小游戏,题材十分新颖,游戏充满 ...

  8. 关于TF卡的工作原理

    首先关于TF卡的定义 其次是TF卡的卡槽 有4个数据传输端,D0,D1,D2,D3.有一个CMD脚,是用来读取卡内信息的,在刚插入TF时,主机会读取卡的内存大小,格式之类的. Sd脚是插入检测脚,当卡 ...

  9. 解决UNIGUI字体太小的问题

    解决UNIGUI字体太小的问题 Unigui运行在chrome浏览器下可以有最佳的效果,但用ie打开用unigui做的项目会发现字体明显小一截,可以用自定义css来解决这个问题. 可以在UniServ ...

  10. 【推荐】Win7任务栏增强工具 7+ Taskbar Tweaker 强大的任务栏标签管理工具

    我曾经推荐过一款XP的任务栏管理工具 Taskix,这是一款在XP系统中拖动任务栏内标签的小工具. XP 32位可以下载我汉化的版本 http://www.cnblogs.com/clso/archi ...