TypeScript基本介紹

TypeScript

TypeScript介紹

背景介紹

  • TypeScript簡稱ts
  • TypeScript是ES6的實現(xiàn),ts語言是按照ES6的標準設計的
  • TypeScript是微軟公司聯(lián)合谷歌公司推出的一門基于javascript的一門新語言,目前主要應用于Angular2以上版本的的開發(fā)中

什么是TypeScript?

  • TypeScript是JavaScript的一個超集,對JavaScript中的變量加入的類型的支持和限制
  • TypeScript可以編譯出純凈,簡潔的Javascript代碼,并且可以運行在任何瀏覽器上、Node.js環(huán)境中和任何支持ECMAScript 3(或更高版本)的JavaScript引擎中
  • TypeScript本身并不能直接運行在瀏覽器上,需要編譯成JavaScript進行運行(可以認為TypeScritp只存在于開發(fā)階段,生產階段依然使用的是我們熟悉的JavaScript,使用TypeScript中的好處可以提高開發(fā)效率,解決javascript弱類型帶來的一些問題)
  • TypeScript的文件后綴名為.ts

運行環(huán)境

TypeScript編譯器介紹

  • TypeScript編譯器基于nodejs環(huán)境,所以必須先安裝nodejs環(huán)境

TypeScript編譯器安裝

  1. 安裝:npm install typescript -g

因為TypeScript編譯器為一個工具包,所以采用全局安裝

  1. 編譯:tsc hello.ts
    • 指定編譯文件名: tsc hello.ts --outFile bundle.js

hello.ts為文件名,因為TypeSscript本身不能直接運行,所以必須編譯成js代碼,才能進行運

TypeScript中數(shù)據(jù)類型介紹

  • 定義布爾類型
    //ts聲明布爾類型的變量
    let flag:boolean=true;

  • ts中定義數(shù)值類型
    let count:number=100

  • ts中定義字符類型
    let str:string='hello world'

  • ts中定義undefined類型
    let a:undefined=undefined

  • ts中定義null
    let b:null=null

  • ts中定義any(任意類型:變量值可以為任意類型)
    let anyData:any=''

  • ts定義void類型:一般用預定義函數(shù)返回值類型

function print:void(params){
    console.log(params);
}
//聲明一個void類型的變量沒有什么大用巫橄,因為你只能為它賦予undefined和null:
let unusable: void = undefined;
  • 定義數(shù)組

    • 第一種:元素類型后面加一個[]
    // 定義一個組成元素為數(shù)字的數(shù)組
    let arr1:number[]=[1,2,3,4]
    //定義一個字符數(shù)組
    let arr2:string[]=['jack','robin','pony']
    // 定義一個對象數(shù)組
    let arr3:object[]=[
        {name:'jack',age:1967},
        {name:'robin',age:1968},
        {name:'pony',birthday:1974}
    ]
    
    • 第二種:使用數(shù)組泛型,Array<元素類型>
    //定義一個組成元素為字符的數(shù)組
    let arr1:Array<string>=['jack','robin','pony']
    //定一個數(shù)字數(shù)組
    let arr2:Array<number>=[1,2,3,4]
    //定義一個對象數(shù)組
    let arr3:Array<object>=[
       {name:'jack',age:1967},
       {name:'robin',age:1968},
       {name:'pony',birthday:1974}
    ]
    
  • 對象的定義

    • 方案1:
    // 在對象名后面使用一個{}來進行對象屬性值類型的約束
    let obj:{name:string,age:number,isMarry:boolean}={
        name:'zs',
        age:30,
        isMarry:false
    }
    
    • 方案2:
    // 使用接口定義屬性值的類型
    interface Person={
        name:string;
        age:number;
        isMarry:boolean;
    }
    // 創(chuàng)建對象的時候引用該接口, 進行屬性值類型的約束
    let p1:Person={
        name:'zs',
        age:30,
        isMarry:false
    }
    

函數(shù)

函數(shù)的定義

  • 加入了類型的約束,只要體現(xiàn)在參數(shù)和返回值上面
function sum(a:number,b:number):string{
    return '求和結果為:'+(a+b);
}

類(class)

類(class)的介紹

// 類(class)相當于ES5中的構造函數(shù)

class Person{
    // 聲明靜態(tài)屬性
    static version:string='V1.0.0';
    //聲明成員屬性; 并進行數(shù)據(jù)類型的約束
    name:string;
    age:number;
    sex:string;
    //構造函數(shù),做一些初始化的事,比如給成員屬性賦值
    constructor(props){
        //成員屬性賦值
        this.name=props.name;
        this.age=props.age;
        this.sex=props.sex;
    }
    //聲明成員方法1
    sayName(){
        console.log('My name is '+this.name);
    }
    //聲明成員方法2
    dance(){
        console.log('我會跳新疆舞');
    }
    // 靜態(tài)成員方法
    static sayHi():string{
        console.log('hello world!!!');
        return 'hello world!!';
    }
}
//創(chuàng)建實例:和js中一樣
let p1=new Person({name:'zs',age:10,sex:'男'})

類的繼承(extends)


//通過extends語法結構繼承Person類的屬性和方法
class Student extends Person{
    //聲明自己獨有的成員屬性; 并進行數(shù)據(jù)類型的約束
    addr:string;
    constructor(props){
        //必須在此處使用super()先調用父類的構造函數(shù)
        super(props);
        //屬性賦值
        this.addr=props.addr
    }
    //添加自己獨有的成員方法
    hobby(){
        console.log('愛生活,愛代碼');
    }
    
}
//創(chuàng)建實例對象
let s1=new Student({name:'ls',age:10,sex:'女',addr:'中國西安'});

構建工具集成

webpack

  • 參考文檔

  • 安裝ts-loader:npm install ts-loader --save-dev

  • 配置webpack

    • webpack.config.js基本配置
    module.exports = {
        entry: "./src/index.tsx",
        output: {
            filename: "bundle.js"
        },
        resolve: {
            // Add '.ts' and '.tsx' as a resolvable extension.
            extensions: ["", ".webpack.js", ".web.js", ".ts", ".tsx", ".js"]
        },
        module: {
            loaders: [
                // all files with a '.ts' or '.tsx' extension will be handled by 'ts-loader'
                { test: /\.tsx?$/, loader: "ts-loader" }
            ]
        }
    };
    

vscode配置ts自動轉換成js

  • 準備工作

    • 全局安裝typescript工具包:npm i typescript -g
  • 第一步: 運行tsc --init命令;生成tsconfig.json項目配置文件

    vscode-ts-01.png

  • 第二步: 終端=>運行任務=>tsc監(jiān)視


    vscode-ts-02.png
  • 第三步:ts文件發(fā)生改變,會自動重新編譯js, 并保存到tsconfig.json中指定的目錄

    vscode-ts-03.png

  • tsconfig.json配置文件示例

    {
        "compilerOptions": {
            "target":"es5",       //指定最終編譯的js版本
            "module": "system",   
            "noImplicitAny": true,
            "removeComments": true,
            "preserveConstEnums": true,
            "outFile": "../../built/local/tsc.js",
            "outDir": "./js",     //指定編譯輸出目錄
            "sourceMap": true
        },
        // 用戶指定需要進行編譯的目錄
        "include": [
            "src/**/*"
        ],
        // 用于指定排除項, 此處配置的目錄文件, 將不會被編譯
        "exclude": [
            "node_modules",
            "**/*.spec.ts"
        ],
        // 指定需要編譯的ts文件列表
        files:[
            "a.ts",
            "b.ts"
        ]
    }
    

參考文檔

英文官網(wǎng)

ts中文網(wǎng)

tsconfig.json

在線運行ts

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末饰序,一起剝皮案震驚了整個濱河市堪伍,隨后出現(xiàn)的幾起案子鸦列,更是在濱河造成了極大的恐慌发乔,老刑警劉巖茄螃,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拆内,居然都是意外死亡旋圆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門麸恍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灵巧,“玉大人,你說我怎么就攤上這事抹沪】桃蓿” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵融欧,是天一觀的道長敏弃。 經常有香客問我,道長噪馏,這世上最難降的妖魔是什么麦到? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮欠肾,結果婚禮上瓶颠,老公的妹妹穿的比我還像新娘。我一直安慰自己刺桃,他們只是感情好粹淋,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虏肾,像睡著了一般廓啊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上封豪,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天谴轮,我揣著相機與錄音,去河邊找鬼吹埠。 笑死第步,一個胖子當著我的面吹牛,可吹牛的內容都是我干的缘琅。 我是一名探鬼主播粘都,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刷袍!你這毒婦竟也來了翩隧?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤呻纹,失蹤者是張志新(化名)和其女友劉穎堆生,沒想到半個月后专缠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡淑仆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年涝婉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔗怠。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡墩弯,死狀恐怖,靈堂內的尸體忽然破棺而出寞射,到底是詐尸還是另有隱情渔工,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布怠惶,位于F島的核電站涨缚,受9級特大地震影響,放射性物質發(fā)生泄漏策治。R本人自食惡果不足惜脓魏,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望通惫。 院中可真熱鬧茂翔,春花似錦、人聲如沸履腋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遵湖。三九已至悔政,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間延旧,已是汗流浹背谋国。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迁沫,地道東北人芦瘾。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像集畅,于是被迫代替她去往敵國和親近弟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353