`
zha_zi
  • 浏览: 584140 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

typescript 用法介绍

阅读更多

前言

Typescript的精髓就在於讓Javascript在compile time的時候有Type(形態)的概念。因此我們會先從Typescript所擁有的基本形態,和我們個人定義的type(interface)來做介紹。

如果您對於如何準備Typescript的環境有疑問,可以先參考上一篇:

Typescript的形態

Typescript有以下幾種基本形態:

  1. boolean
  2. number
  3. string
  4. array
  5. enum
  6. any - 這個表示某一個variable的type是任意。其實就是和javascript的原生var一樣概念;這個variable的type可以是任意,通常用於定義外部javascript library沒有 typescript對應type的時候使用。any其實也很像C#裡面的dynamic。
  7. void - 在function裡面使用,表示這個function不會返回任何形態。
  8. interface - 不屬於Basic Type的一部分。interface的作用只是如果你有complex type想要定義,就使用interface(當然另外一個作用是用來class做implement)

我相信有寫過任何後端程式語言(例如C#和Java)對於上述的形態都不陌生,不過在詳細介紹之前,我們先介紹要如何定義variable的type。

如何定義variable的type

Typescript裡面定義的基本寫法是:

1 //var {variableName} : {type}
2 var name : string;

前半部分和一般javascript一樣,由var開頭之後是variable名稱,而typescript使用冒號後面的內容作為定義形態。上面的例子就是,定義一個variable叫做name,他的type是string。

如果是要定義function的variable type也是一樣,舉例來說:

1 function helloWorld(showText : string) : void
2 {
3 }

上述的function資訊如下:

  • function 名稱是helloWorld
  • 接受參數的type要是string
  • 不會返回任何東西(void)

最基本的三個type:boolean, number, string

這三個type是做基本的,variable定義起來也很簡單:

1 var name : string;
2 var age : number;
3 var isMarried : boolean;

array的定義

array有兩種定義方式:

1 var names:string[] = ["alan""james"]; //使用[]
2 var names:Array<string> = ["alan""james"]; //使用Array Generic

enum的定義

enum 定義如下:

1 enum Status{
2     Good,
3     Bad,
4     Normal
5 }
6 var goodsStatus : Status = Status.Good;

enum在被轉成javascript的時候其實使用的是number和string對應,因此每一個enum值可以是以number值顯示,也可以是string值顯示。

以上面的例子來看, Status.Good的string形態是Good,而數字形態是0(因為預設enum是從0開始,然後之後的enum就是前一個+1)。

假設想要修改enum的number值,可以直接assign數字:

1 enum Status{
2     Good =1 , //number值是1
3     Bad,      //number值是前一個的number值+1=2
4     Normal    //number值是是前一個的number值+1=3
5 }

或者是每一個個字指定

1 enum Status{
2     Good =2 ,     //number值是2
3     Bad = 5,      //number值是5
4     Normal = 6    //number值是6
5 }

string 值 和 number 值轉enum

1 enum Status {
2     Good,
3     Bad,
4     Normal
5 }
6 var goodsStatus: Status = Status["Bad"]; //string 轉 enum
7 goodsStatus = Status[Status[2]]; //number 轉 enum

enum值轉成string值或者number值

1 enum Status {
2     Good,
3     Bad,
4     Normal
5 }
6 var goodsStatusString: string = Status[Status.Good]; // enum值轉 string值
7 var goodsStatusNumber: number = Status.Good;// enum值轉 number值

any的定義

any的定義如下:

1 var externalJS : any;

盡量少使用any,因為使用any就喪失了typescript的用意,就像C#建議不要使用dynamic一樣。

使用any的情景是當某些外部的javascript library沒有對應的typescript definition檔案(之後提到,有點類似於C++裡面的.h檔案,告知會有那些形態),但是又需要reference使用的情況下,才使用any。

void定義

這個只有在function裡面的return會定義,一般variable不可能是void type:

1 function printWord(text:string) : void{};

上述表示function printWord不會返回任何形態。

interface的定義

假設我們希望傳入function裡面是一個complex type,我們可以利用interface來達到:

1 interface IPerson {
2     name: string;
3     age: number;
4 }
5  
6 function alertPersonInfo(person: IPerson) {
7     alert("name: " + person.name + " age: " + person.age);
8 }

這種好處是intellisense也會很清楚:

image可以看到傳進來只會有什麼樣的內容

interface的除了用來定義complex type之外,另外一個作用是和C#一樣,class可以實作interface。這個部分之後可以提到。

定義type之後帶來的好處

  1. intellisense的支援
  2. 傳variable的時候提醒

intellisense的支援

舉例來說,通常我們如果是string類型的variable才會有toLower()或者split(),這些方法其他type就沒有:

imagestring type以 tolo開頭的方法 imagenumber type 以 tolo開頭的方法

除了支援的function會不同之外,也可以看的出這些function接受的形態返回的參數。舉例來說,name.toLocaleLowerCase()就不接受任何參數,並且會返回一個string 形態的值。從這邊就可以簡單的看出如何使用一個function。

傳variable的時候提醒

假設我定義一個方法是會alert一個string的訊息,那麼我可以定義成為:

1 function splitText(text: string, seperator: string): void {
2     text.split(seperator);
3 }

假設今天我給他傳了number,在編譯的時候就會告知有錯:

image可以看到顯示錯誤訊息

雖然有出現錯誤,但是可以看到右邊的視窗(代表typescript被編譯成為的javascript)還是有產出 - 因為以javascript的角度來說是沒有type的概念。

不過透過使用Typescript,我們可以在compile time就避免掉這種傳錯variable的問題。

Typescript轉成Javascript需要注意的部分

Typescript裡面type的概念其實在javascript裡面不一定有對應。舉例來說,string、 number和boolean三個其實轉成javascript是都一樣的:

imagetypescript形態轉換成為javascript樣子

可以看到,實際轉換的javascript其實轉出來的長得都會一樣,因此typescript的type只是compile time才有作用(之後文章會提到這些會可能帶來什麼奇怪的bug)。

這邊可以特別注意到interface實際是完全不會轉成javascript的,因此interface只是在typescript裡面看的。

結語

希望透過這一篇對於Typescript裡面的精華:type的使用有比較清楚的概念,同時可以了解到使用type所能夠帶來的好處。

分享到:
评论

相关推荐

    TypeScript手册(TypeScript Handbook) 重写新版 PDF版

    该手册是学习 TypeScript 语言及其常用用法的主要资源。官方人员指出,新手册在 TypeScript 团队中已经是一个运行多年的项目,包含了大大小小的数百个贡献。 这项重写工作的重点在于对 TypeScript 的教学方式进行了...

    Learning TypeScript

    《Learning TypeScript》首先介绍了TypeScript 的基本语法和基本的自动化工作流配置方法,然后从面向对象入手,着重介绍了面向对象的概念和它的一些最佳实践,并结合例子讲解了如何基于TypeScript 的类型系统应用...

    ts typescript.txt

    01Typescript介绍 、Typescript安装、Typescript开发工具(15分51秒).rar 02 Typescript 中的数据类型 boolean 数字类型 number类型 string类型 array类型元组类型 (tuple)枚举类型 (enum) ...

    vue框架中props的typescript用法详解

    什么是typescript typescript 为 javaScript的超集,这意味着它支持所有都JavaScript都语法。...在vue中使用typescript时,需要引入vue-property-decorator库来兼容格式。 javascript写法 Vue.componen

    用于 TypeScript 的 PEG 解析器生成器_Typescript_代码_下载

    tsPEG是 TypeScript 的 PEG 解析器生成器。tsPEG接受语法的直观描述,并输出一个功能齐全的解析器,该解析器充分利用了 TypeScript 类型系统。 ...更多详情、使用方法,请下载后阅读README.md文件

    Learning TypeScript 中文完整版

    本书首先介绍了TypeScript 的基本语法和基本的自动化工作流配置方法,然后从面向对象入手,着重介绍了面向对象的概念和它的一些最佳实践,并结合例子讲解了如何基于TypeScript 的类型系统应用这些最佳实践。...

    typescript 基本用法md文档 和 面向对象用法

    typescript 基本用法md文档 和 面向对象用法

    TypeScript高级用法的知识点汇总

    主要给大家介绍了关于TypeScript高级用法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用TypeScript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    typescript使用nodejs实现简繁体转换

    typescript使用nodejs实现简繁体转换,可以转换子文件夹, 运行方式:将文件复制到工程的files文件夹,运行node app.js "" s2t(简体转繁体)或node app.js "" t2s(繁体转简体)即可

    TypeScript手册

    内容概要:本书全面介绍了TypeScript的要点信息,是作为知识温习和搜索的首选。 适合人群:具备一定编程基础,想学习TypeScript或者需要经常查询TypeScript知识的开发者。 能学到什么:1️⃣了解TypeScript的来源及...

    TypeScript 教程

    TypeScript 教程是一个TypeScript 开源教程,介绍基本概念和用法,面向初学者。需要的朋友可下载试试! 今年 3 月份快写完这份教程的时候,TypeScript 5.0 突然发布了。装饰器(Decorators)改用全新语法。因此他...

    nodejs_typescript_document:nodejs与typescript介绍,使用与转换案例

    nodejs与typescript介绍,使用与转换案例nodejs与typescript介绍,使用与转换案例我使用nodejs的经验我在出现之前就开始使用在前公司使用nodejs + mongodb + React开发电能管理系统使用electron + LevelDB + React...

    thrift-typescript:从Thrift IDL文件生成TypeScript

    用法 Thrift TypeScript提供JavaScript和命令行API。 给定以下文件 节俭/简单 struct MyStruct { 1 : required i32 id, 2 : required bool field1, # 3 : required string field, 4 : required i16 field, } ...

    基于 TypeScript 的 Screeps AI代码的入门套件_Typescript_代码_下载

    Screeps Typescript Starter 是用 Typescript 编写的 Screeps AI 的起点。它提供了您开始编写 AI 所需的一切,同时main.ts尽可能保持空白。 基本用法 ...更多详情、使用方法,请下载后阅读README.md文件

    使用Typescript编写更加易用的localStorage和sessionStorage的API

    使用Typescript编写更加易用的localStorage和sessionStorage的API

    TypeScript中的方法重载详解

    主要给大家介绍了关于TypeScript中方法重载的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用TypeScript具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    在Vue.js中使用TypeScript的方法

    vue2.x 对TypeScript的支持还不是非常完善,但是从今年即将到来的3.0版本在GitHub上的仓库 vue-next 看,为TS提供更好的官方支持应该也会是一个重要特性,那么,在迎接3.0之前,不妨先来看看目前版本二者的搭配食用...

    Vue 中使用 typescript的方法详解

    Typescript 5年内的热度随时间变化的趋势,整体呈现一个上升的趋势。也说明ts越来越&#65039;受大家的关注了。这篇文章主要介绍了Vue 中使用 typescript的方法详解,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics