Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从C#到TypeScript - 类型

从C#到TypeScript - 类型

作者头像
用户1147588
发布于 2018-01-04 03:30:43
发布于 2018-01-04 03:30:43
1.9K00
代码可运行
举报
文章被收录于专栏:技术/开源技术/开源
运行总次数:0
代码可运行

从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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let num = 20;       // 10进制
let num = 0xa4;     // 16进制
let num = 0b10010;  // 2进制
let num = 0o24;     // 8进制

布尔

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let isCheck: boolean = true;

枚举

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

  1. 目的都是为数值提供一个友好的名字,增加代码可读性和可重构性
  2. 默认情况下从0开始编号
  3. 也可以手动赋值
  4. 可以实现类似C# Flag特性 但也有一些细节不一样:
  5. C#的枚举值toString()会返回枚举的文本值,而TypeScript是数值
  6. TypeScript可以通过数值下标取得枚举字符串值
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的规范。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let name: string = 'brook';
let note: string = `this is ${name}'s blog`;

Symbol

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let key1 = Symbol('key');
let key2 = Symbol('key');

console.info(key1 === key2); // return false

any

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let test: any = 'test';
test = false;

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

void、null、undefined和never

void和C#的一样,表示没有任何东西。 nullundefined和JavaScript一样,分别就是它们自己的类型,个人觉得这两者功能有点重合,建议只使用undefinednever是TypeScript引进的,个人觉得是一种语义上的类型,用来表示永远不会得到返回值,比如while(true){}throw new Error()之类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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');
}

数组

有基本的数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let arr: string[] = ['a', 'b', 'c'];

也有类似C#的泛型List

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let list: Array<string> = ['a', 'b', 'c'];

数组功能没C#配合linq那么强大,不过配合其他一些库如lodash也可以很方便的进行各种操作。 数组还可以利用扩展操作符...来把数组解开再放入其他数组中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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之类的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(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#,不过叫法上是分开的,这里的元组只是对数组的处理,另外还有对象上的叫解构赋值,以后会写。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let tuple: [number, string] = [123, '456'];
let num = tuple[0]; //num
let str = tuple[1]: //string

tuple[3] = '789'; //可以,越界后会以联合类型来判断,后面会讲联合类型
tuple[4] = true; //不行

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-02-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
从C#到TypeScript - function
从C#到TypeScript - function 虽然TypeScript里有了类,但JavaScript的function也还在,这也是和C#的不同所在。 C#里函数不能脱离类工作,但TypeS
用户1147588
2018/01/04
1K0
从C#到TypeScript - 变量
从C#到TypeScript - 变量 TypeScript的变量声明和ES6差不多,相比之前主要是多了let和const 为什么不用var 不管是TypeScript还是ES6都会兼容以前的java
用户1147588
2018/01/04
9250
从C#到TypeScript - 类
本文介绍了从C#到TypeScript - 类的基础知识,包括类的定义、构造函数、属性、方法、继承、多态、泛型、接口和抽象类。TypeScript还支持接口和抽象类,提供了许多类和接口的示例。此外,TypeScript还支持泛型,可以与接口和抽象类一起使用。这些概念都是JavaScript编程语言中比较高级的概念,需要有一定的编程基础才能理解。
用户1147588
2018/01/04
1.2K0
从C#到TypeScript - Proxy
用户1147588
2018/01/04
9660
从C#到TypeScript - Reflect
从C#到TypeScript - Reflect 在C#里如果想只通过名字来生成类实例、获取属性或执行方法可以使用反射,反射是基于元数据,现在很多流行语言都支持元数据,以此来提供更多便利的功能。 E
用户1147588
2018/01/04
1.2K0
从C#到TypeScript - 接口
从C#到TypeScript - 接口 为了更好的抽象出行为和属性,TypeScript在ES6的基础上增加了接口interface。 C#也有interface,不过TypeScript的接口还不
用户1147588
2018/01/04
1.4K0
typescript[0x01]--基础数据类型
楼上这句话后半部分听不懂没有关系,下面跟ataola一起通过一些具体实例和思考,来一起学习一下typescript吧!
江涛学编程
2020/06/19
5570
Typescript 的数据类型总结
typescript 和 javascript几乎一样,拥有相同的数据类型,另外在javascript基础上提供了更加实用的类型供开发使用
@超人
2021/10/21
2.2K0
Typescript 的数据类型总结
typescript 的数据类型有哪些
typescript 是 javascript的超集,在javascript基础上提供了更加实用的类型供开发使用;
程序媛夏天
2024/03/01
2220
从C#到TypeScript - 高级类型
用户1147588
2018/01/04
1.1K0
从C#到TypeScript - 装饰器
用户1147588
2018/01/04
8970
TypeScript超详细入门教程(上)
同学你好,我是Lison。很高兴你对TypeScript感兴趣,或许你对TypeScript了解还不多,或许还有很多疑问,比如:
全栈程序员站长
2022/11/16
4.3K0
TypeScript超详细入门教程(上)
TypeScript
TypeScript中的Object类型并不单指普通的对象类型,而是泛指非原始类型,也就是对象,数组和函数
conanma
2021/10/28
1.8K0
系统学习 TypeScript(三)——基础类型
TypeScript 中的整形和浮点数类型都是 number,这点和 JavaScript 是一样的,比如:十进制、二进制、八进制和十六进制的类型都是 number。
编程三昧
2022/02/24
6440
系统学习 TypeScript(三)——基础类型
TypeScript 快速入门
由于这种强弱类型之分根本不是某一个权威机构的定义,一般描述强类型有更强的类型约束,而弱类型中几乎没有什么约束。
用户3045442
2020/08/06
1.6K0
TypeScript 快速入门
《一》大话 TypeScript 基本类型
旨在利用碎片时间快速入门 Typescript. 或重新温故 Typescript 查漏补缺.
lucifer210
2020/03/24
7410
从C#到TypeScript - Generator
用户1147588
2018/01/04
1.3K0
前端应该掌握的Typescript基础知识
js 是一门动态弱类型语言, 我门可以随意的给变量赋不同类型的值 ts 是拥有类型检查系统的 javascript 超集, 提供了对 es6 的支持, 可以编译成纯 javascript,运行在任何浏览器上。 TypeScript 编译工具可以运行在任何服务器和任何系统上。TypeScript 是开源的。
前端老鸟
2022/03/07
6420
TypeScript基础知识
TypeScript是JavaScript的一个超集,支持ECMAScript6标准。
岳泽以
2022/11/22
2.3K0
TypeScript基础知识
TypeScript学习笔记之基础类型
用户1141560
2017/12/25
6150
相关推荐
从C#到TypeScript - function
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档