惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Scott Helme
Scott Helme
宝玉的分享
宝玉的分享
B
Blog RSS Feed
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
博客园_首页
H
Help Net Security
T
The Blog of Author Tim Ferriss
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
F
Full Disclosure
爱范儿
爱范儿
罗磊的独立博客
G
Google Developers Blog
Last Week in AI
Last Week in AI
Jina AI
Jina AI
量子位
Hacker News: Ask HN
Hacker News: Ask HN
aimingoo的专栏
aimingoo的专栏
PCI Perspectives
PCI Perspectives
酷 壳 – CoolShell
酷 壳 – CoolShell
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Secure Thoughts
L
LINUX DO - 最新话题
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
V
V2EX
H
Heimdal Security Blog
Engineering at Meta
Engineering at Meta
I
InfoQ
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
S
Security Affairs
Security Archives - TechRepublic
Security Archives - TechRepublic
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
T
Tor Project blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Attack and Defense Labs
Attack and Defense Labs
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
D
Docker
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
有赞技术团队
有赞技术团队
J
Java Code Geeks

博客园 - 莫耶

学习RxJS:Cycle.js 学习RxJS: 导入 [Node.js] Node.js项目的持续集成 [Node.js] 使用node-forge保障Javascript应用的传输安全 [Node.js] 对称加密、公钥加密和RSA [Node.js] DSL in action [Node.js] Node.js中的流 [Node.js] 基于Socket.IO 的私聊 [Node.js] 闭包和高阶函数 [Node.js] Promise,Q及Async [Node.js] Express的测试覆盖率 [Node.js] BDD和Mocha框架 [Node.js] 也说this [Node.js] ECMAScript 6中的生成器及koa小析 [Node.js] 使用File API 异步上传文件 [Node.js] OAuth 2 和 passport框架 [Node.js] Node + Redis 实现分布式Session方案 [Node.js] Cluster,把多核用起来 Python开源框架Scrapy安装及使用
[Node.js] 使用TypeScript编写Node项目
莫耶 · 2015-04-25 · via 博客园 - 莫耶

2015-04-25 19:59  莫耶  阅读(8618)  评论()    收藏  举报

原文地址:http://www.moye.me/2015/04/25/using_typescript/

入 TypeScript 坑有一段时间了,由衷的看好,所以决定在自留地絮叨一番。

typescript

是什么

TypeScript (以下简称TS)是巨硬推出的JavaScript转译语言,这意味着:

  1. 它需要编译
  2. TS代码会被编译成JavaScript代码

TS的特点是提供 模块、类、接口等一系列类型概念,协助开发者在编译时就定位出一些传统JavaScript项目的运行时错误,以实现巨硬所谓的”Robust components”(值得一提的是,TS是大名鼎鼎的 Anders Hejlsberg 主导的项目。

为什么

JavaScript 一般被视为一种动态类型、弱类型的语言,它拥有巨大的灵活性。 如下所示,类型的变化并不受约束:

var x = 10;
console.log(typeof x);  // result -> number
x = 'hello';
console.log(typeof x);  // result -> string

那么TS引入的类型概念,又为哪般呢?来看一个示例:

我有一个求和的函数

function sum(x, y){
    return x + y;
}

但是你也可以这么用,JavaScript没有意见,虽然结果不合理:

sum(100, 'hello'); // result -> 100hello

于是,我们用TS这样的限定,保证以上调用是通不过编译的(输入都是number,返回也必须是number:

function sum(x:number, y:number):number {
    return x + y;
}

因为我们坚信,对一个数字和一个字符串进行求和,不是一种理智的需求;修改过后,sum求和的结果便是可信的了。

类示例

在 Node 中,因为流和事件机制的强大,很多时候我们都会让自己的类去继承 events.EventEmitter,JS代码看起来就像是这样: 

如果你熟悉Node的一套理论,倒也还好,但其实用TS,能写出更优雅的代码:

import events = require('events');
import util = require('util');

export class MyClass extends events.EventEmitter{
    constructor(){
        super();
    }
}

具体的语法规范这里不做解释,有兴趣的可以参考官方的 Specification

这里想说的是,TS生成的JS代码质量很高,上述片断生成的代码(闭包防污染也考虑到了:

在WebStorm中使用

鄙人已退 Windows 开发保平安,也就只能说说WebStorm的使用问题了:

首先,你得有一个TS编译器 :)

然后,在第一次新建.ts文件的时候,WebStorm会询问是否为.ts文件添加watcher,这样在文件有保存动作时,watcher会自动调用编译器去编译&生成——我的选择是“否”:稍微复杂一点的项目都会使用Grunt/Gulp之类的自动化构建工具,编译也就会纳入为构建的一份子,那么以Grunt为例,编译这事交给 grunt-ts 就再合理不过了。grunt-ts配置示例:

那么在项目中,需要存在一个 underscore.d.ts,其中声明这么一句(完整示例请参考underscore.d.ts

然后在引用的地方声明一个.d.ts,引入:

如此一来,方可正确通过编译,亦能得到WebStorm的智能提示。当然,如果不爽这种麻烦的引用,也可以不用import,直接使用如下形式来跳过TS检查:

一般而言,知名的第三方库,都能在 DefinitelyTyped 项目中找到 .d.ts,而WebStorm亦提供了快捷引用方式:

Preferences -> Languages & Frameworks -> Libraries -> Downloads… -> TypeScript community stubs,选你所需 Download & Install:

community_stubs

参考

  1. TypeScript Handbook:online version

更多文章请移步我的blog新地址: http://www.moye.me/  

Creative Commons License