国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

強類型 JavaScript 的解決方案

瀏覽:33日期:2023-11-21 10:32:31

JavaScript 是一種弱類型(或稱動態類型)語言,即變量的類型是不確定的。

x = 5; // 5x = x + ’A’; // ’5A’

上面代碼中,變量x起先是一個數值,后來是一個字符串,類型完全由當前的值決定,這就叫弱類型。

弱類型的好處是十分靈活,可以寫出非常簡潔的代碼。但是,對于大型項目來說,強類型更有利,可以降低系統的復雜度,在編譯時就發現類型錯誤,減輕程序員的負擔。

一直有人嘗試,讓 JavaScript 變成強類型語言。在官方最終支持強類型之前,本文介紹三種現在就可用的解決方案。

 一、TypeScript

TypeScript 是微軟2012年推出的一種編程語言,屬于 JavaScript 的超集,可以編譯為 JavaScript 執行。 它的最大特點就是支持強類型和 ES6 Class。

首先,安裝TypeScript。

$ npm install -g typescript

然后,為變量指定類型。

// greet.tsfunction greet(person: string) { console.log('Hello, ' + person);}greet([0, 1, 2]);

上面是文件 greet.ts 的代碼,后綴名 ts 表明這是 TypeScript 的代碼。函數 greet 的參數,聲明類型為字符串,但在調用時,傳入了一個數組。

使用 tsc 命令將 ts 文件編譯為 js 文件,就會拋出類型不匹配的錯誤。

$ tsc greeter.tsgreet.ts(5,9): error TS2345: Argument of type ’number[]’ is not assignable to parameter of type ’string’. 二、Flowcheck

Flowcheck 是一個輕量級的類型斷言庫,可以在運行時(runtime)檢查變量類型是否正確。

首先,安裝Flowcheck。

$ npm install -g flowcheck

然后,編寫一個聲明了變量類型的腳本。

function sum(a: number, b: number) { return a + b;}sum(’hello’,’world’)

接著,使用下面的命令,將腳本轉換為正常的 JavaScript 文件。

$ browserify -t flowcheck -t [reactify --strip-types] input.js -o output.js

轉換后的文件如下。

var _f = require('flowcheck/assert');function sum(a, b) { _f.check(arguments, _f.arguments([_f.number, _f.number])); return a + b;}

可以看到,代碼中插入一個斷言庫。每次運行函數之前,會先執行斷言,如果類型不符就報錯。

$ node output.js// throw new TypeError(message); ^TypeError: Expected an instance of number got 'hello', context: arguments / [number, number] / 0Expected an instance of number got 'world', context: arguments / [number, number] / 1 三、Flow

Flow 是 Facebook 在2014年發布的一個類型檢查工具,用來檢查 React 的源碼。

安裝命令如下。

$ npm install --global flow-bin

如果安裝不成功(我就是如此),就需要自己從源碼編譯了。

Flow 的用法很多,我只舉幾個例子。前文介紹的兩種工具,只能檢查聲明了類型的變量,而 Flow 可以推斷變量類型。

// hello.js/* @flow */function foo(x) { return x*10;}foo('Hello, world!');

上面是文件 hello.js ,該文件的第一行是注釋,表明需要使用 Flow 檢查變量類型。

$ flow checkhello.js:7:5,19: stringThis type is incompatible with/hello.js:4:10,13: number

運行 flow check 命令,得到報錯信息:預期函數 foo 的參數是一個數值,但是實際為一個字符串。

Flow 也支持變量的類型聲明。

/* @flow */function foo(x: string, y: number): string { return x.length * y;}foo('Hello', 42);

另一個有趣的功能是,Flow 可以將類型注釋(annotation),轉為類型聲明。

// annotation.js/** @param {number} x @return {number} */function square(x) { return x * x;}square(5);

運行 flow port 命令,會得到下面的結果。

$ flow port annotation.jsfunction square(x: number) : number { return x * x; }

Flow 的更多介紹,可以閱讀《Exploring Flow, Facebook’s Type Checker for JavaScript》。

本文的原始幻燈片點擊這里(里面有更多內容)。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 国产亚洲精品线观看77 | 又黄又爽视频好爽视频 | 国产系列在线播放 | 亚洲看片网 | 中字毛片 | 日本高清专区一区二无线 | 国产成人精品综合在线 | 日本三级久久 | www日本免费| 成人免费一级在线播放 | 免费狼人久久香蕉网 | 99久久一区| 99久久免费国产香蕉麻豆 | 最新99国产成人精品视频免费 | 91.xxx.高清在线 | 亚洲一区二区三区91 | 久久香蕉国产视频 | 三级毛片在线免费观看 | 黄色毛片在线 | 美女三级网站 | 亚洲www色 | 免费永久在线观看黄网 | 成人毛片免费免费 | 欧美高清不卡 | 免费看a级 | 男人的天堂久久香蕉国产 | 亚洲欧美一区二区三区综合 | 全国男人的天堂网站 | 毛片大片 | 国产成人精品本亚洲 | 久草视频中文 | 中文字幕一级毛片视频 | 性欧美videofree中文字幕 | 国产农村乱 | 日韩在线专区 | 91玖玖 | 性感一级毛片 | 97在线视频免费观看费观看 | 欧美午夜精品久久久久久黑人 | 国产精品一区二区久久精品涩爱 | 精品国产一区二区在线观看 |