前言
Typescript的精髓就在於讓Javascript在compile time的時候有Type(形態)的概念。因此我們會先從Typescript所擁有的基本形態,和我們個人定義的type(interface)來做介紹。
如果您對於如何準備Typescript的環境有疑問,可以先參考上一篇:
Typescript的形態
Typescript有以下幾種基本形態:
- boolean
- number
- string
- array
- enum
- any - 這個表示某一個variable的type是任意。其實就是和javascript的原生var一樣概念;這個variable的type可以是任意,通常用於定義外部javascript library沒有 typescript對應type的時候使用。any其實也很像C#裡面的dynamic。
- void - 在function裡面使用,表示這個function不會返回任何形態。
- interface - 不屬於Basic Type的一部分。interface的作用只是如果你有complex type想要定義,就使用interface(當然另外一個作用是用來class做implement)
我相信有寫過任何後端程式語言(例如C#和Java)對於上述的形態都不陌生,不過在詳細介紹之前,我們先介紹要如何定義variable的type。
如何定義variable的type
Typescript裡面定義的基本寫法是:
前半部分和一般javascript一樣,由var開頭之後是variable名稱,而typescript使用冒號後面的內容作為定義形態。上面的例子就是,定義一個variable叫做name,他的type是string。
如果是要定義function的variable type也是一樣,舉例來說:
1 |
function helloWorld(showText : string) : void
|
上述的function資訊如下:
- function 名稱是helloWorld
- 接受參數的type要是string
- 不會返回任何東西(void)
最基本的三個type:boolean, number, string
這三個type是做基本的,variable定義起來也很簡單:
3 |
var isMarried : boolean;
|
array的定義
array有兩種定義方式:
1 |
var names:string[] = [ "alan" , "james" ];
|
2 |
var names:Array<string> = [ "alan" , "james" ];
|
enum的定義
enum 定義如下:
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數字:
或者是每一個個字指定
string 值 和 number 值轉enum
6 |
var goodsStatus: Status = Status[ "Bad" ];
|
7 |
goodsStatus = Status[Status[2]];
|
enum值轉成string值或者number值
6 |
var goodsStatusString: string = Status[Status.Good];
|
7 |
var goodsStatusNumber: number = Status.Good;
|
any的定義
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來達到:
6 |
function alertPersonInfo(person: IPerson) {
|
7 |
alert( "name: " + person.name + " age: " + person.age);
|
這種好處是intellisense也會很清楚:
可以看到傳進來只會有什麼樣的內容
interface的除了用來定義complex type之外,另外一個作用是和C#一樣,class可以實作interface。這個部分之後可以提到。
定義type之後帶來的好處
- intellisense的支援
- 傳variable的時候提醒
intellisense的支援
舉例來說,通常我們如果是string類型的variable才會有toLower()或者split(),這些方法其他type就沒有:
string type以 tolo開頭的方法 number type 以 tolo開頭的方法
除了支援的function會不同之外,也可以看的出這些function接受的形態返回的參數。舉例來說,name.toLocaleLowerCase()
就不接受任何參數,並且會返回一個string 形態的值。從這邊就可以簡單的看出如何使用一個function。
傳variable的時候提醒
假設我定義一個方法是會alert一個string的訊息,那麼我可以定義成為:
1 |
function splitText(text: string, seperator: string): void {
|
假設今天我給他傳了number,在編譯的時候就會告知有錯:
可以看到顯示錯誤訊息
雖然有出現錯誤,但是可以看到右邊的視窗(代表typescript被編譯成為的javascript)還是有產出 - 因為以javascript的角度來說是沒有type的概念。
不過透過使用Typescript,我們可以在compile time就避免掉這種傳錯variable的問題。
Typescript轉成Javascript需要注意的部分
Typescript裡面type的概念其實在javascript裡面不一定有對應。舉例來說,string、 number和boolean三個其實轉成javascript是都一樣的:
typescript形態轉換成為javascript樣子
可以看到,實際轉換的javascript其實轉出來的長得都會一樣,因此typescript的type只是compile time才有作用(之後文章會提到這些會可能帶來什麼奇怪的bug)。
這邊可以特別注意到interface實際是完全不會轉成javascript的,因此interface只是在typescript裡面看的。
結語
希望透過這一篇對於Typescript裡面的精華:type的使用有比較清楚的概念,同時可以了解到使用type所能夠帶來的好處。
相关推荐
该手册是学习 TypeScript 语言及其常用用法的主要资源。官方人员指出,新手册在 TypeScript 团队中已经是一个运行多年的项目,包含了大大小小的数百个贡献。 这项重写工作的重点在于对 TypeScript 的教学方式进行了...
《Learning TypeScript》首先介绍了TypeScript 的基本语法和基本的自动化工作流配置方法,然后从面向对象入手,着重介绍了面向对象的概念和它的一些最佳实践,并结合例子讲解了如何基于TypeScript 的类型系统应用...
对于TypeScript的学习者来说,网站提供了丰富的教程和示例,包括基本类型的说明(***),以及各种高级特性的使用方法。 在搭建TypeScript开发环境时,首先需要使用npm(Node Package Manager)安装TypeScript包。...
要开始使用TypeScript,首先需要安装TypeScript编译器。安装后,可以通过命令行工具`tsc`来编译TypeScript代码。例如,创建一个`.ts`文件,使用`tsc 文件名.ts`命令编译,编译后会生成相应的`.js`文件,这个文件可以...
在 TypeScript 中,可以使用接口来定义函数的形状。 ```typescript interface SearchFunc { (source: string, subString: string): boolean; } let mySearch: SearchFunc; mySearch = function(source: string, ...
本示例将聚焦于如何在TypeScript项目中集成和使用jQuery库,一个广泛应用于DOM操作、事件处理和AJAX请求的库。 首先,为了在TypeScript项目中使用jQuery,你需要确保已经安装了jQuery库和TypeScript的jQuery类型...
**TypeScript 使用手册(中文版)翻译** TypeScript 是一种由微软开发的强类型、静态类型的超集语言,它在 JavaScript 的基础上增加了许多高级特性,如接口、泛型、枚举、类等,旨在提高代码的可维护性和可读性。这...
01Typescript介绍 、Typescript安装、Typescript开发工具(15分51秒).rar 02 Typescript 中的数据类型 boolean 数字类型 number类型 string类型 array类型元组类型 (tuple)枚举类型 (enum) ...
6. 模块(Modules):阐述了TypeScript中模块的定义和使用方法,模块化编程是大型项目中的关键概念。 7. 基本概念(Basic Concepts):包括语法约定(Grammar Conventions)、命名空间(Namespaces)和命名类型...
2. **库和框架的开发**:许多知名的前端库和框架如Angular、React和Vue.js都提供了对TypeScript的支持,开发者可以在这些库的基础上使用TypeScript进行扩展。 3. **团队协作**:在多人协作的项目中,TypeScript的...
基础部分包括对TypeScript的安装指南,示例代码演示,以及对TypeScript基础概念的介绍。如原始数据类型,包括数字、字符串、布尔值、空值和未定义值等。还有任意值类型,表示可以赋值给任意类型的变量,即对该变量...
- **Iterators 和 Generators**:解释迭代器 (`iterator`) 和生成器 (`generator`) 的概念及使用方法。 - **模块**:探讨如何使用模块化的方式来组织代码。 - **命名空间**:解释命名空间 (`namespace`) 的作用和...
接口(Interface)是TypeScript的另一大亮点,它用于定义对象的形状,包括属性、方法等。在“TypeScriptSamples-master”中,你可能找到用接口来规范复杂数据结构的例子,例如定义一个用户对象或API响应模型。同时,...
TypeScript还支持类型别名(TypeAliases)的使用,通过别名简化复杂的类型结构。 在类型关系(TypeRelationships)部分,规范讲解了成员的表面化(ApparentMembers)、类型和成员身份(TypeandMemberIdentity)、子...
TypeScript 提供了丰富的文档和支持资料,帮助开发者快速掌握其基本用法。 ### ASP.NET Core 和 ASP.NET 4 支持 TypeScript 在 ASP.NET 平台上有着广泛的应用。无论是使用较新的 ASP.NET Core 还是之前的 ASP.NET ...
综上所述,《TypeScript for C# Programmers》是一本全面介绍TypeScript特性和用法的书籍,特别适合那些熟悉C#并希望过渡到JavaScript的开发者。通过这本书,读者不仅能够掌握TypeScript的基础知识,还能学会如何...
TypeScript中定义数组的方式有多种,例如使用元素类型的后缀加上方括号,或者使用元素类型的联合类型与`[]`结合。 #### 四、TypeScript接口 **4.1 最简单接口使用** 接口(Interface)是用来定义对象的形状的。...
**TypeScript 中文手册** TypeScript 是一种由微软开发的开源编程语言,...通过阅读 "typescript - 中文手册",开发者可以深入理解 TypeScript 的各种特性和用法,从而更好地利用这一语言进行高效、高质量的软件开发。
TypeScript手册介绍了如何使用TypeScript来提升JavaScript项目开发效率。TypeScript是JavaScript的一个超集,提供了静态类型系统和基于类的面向对象编程特性。在TypeScript的最新版本4.2中,手册被重写以涵盖新的...