Typescript教程 - 基础部分

学习typescript

2019年6月21日11:22:22

阮一峰的书
阮一峰的typescript

安装typescript npm install -g typescript

tsc 是它一个命令 编译ts文件的
用法 tsc 文件名

基础部分

定义类型

js 类型有两种 原始数据类型boolean number String null undefined es6的Symbol 和对象类型


let isDone: boolean = false  //定义成其他数据类型时 编译报错
let myName: string = 'Tom';
let myAge: number = 25;
let u: undefined = undefined;
let n: null = null;

function noThing():void{
    console.log("just for consolelog something")
}
let unusable: void = undefined //也可以是null 

任意类型Any
let aa:string = 'aili'
aa = 7

let bb:any = '1231asdfa'
bb = false

//未来声明的变量
let cc;
cc = 'aili'
cc = 123
类型推论

没有指定类型 编译会报错 但是ts会推测出类型 any类型不被做类型检查

联合类型
let a:string | number;
// a = false
a = 'aili'
// a = 7

number类型没有length属性 报错
function getLength(something: string | number): string {
    return something.length
}
访问二者共有属性或者方法是可以的
function getLength(something: string | number): string {
    return something.toString()
}
对象的类型 -- 接口

定义对象类型 接口这部分是难点

对行为的抽象 具体如何行动由类实现 其实看了基础部分回过头再来看 就是 定义 形状

// 接口 定义了多少属性方法 定义变量的时候得一致 不然报错  不能多不能少
// 赋值的时候,变量的形状必须和接口的形状保持一致。
interface Person {
    name:String
    age:number
    sex:String
    hasJob:boolean
}

let aili: Person = {
    name: 'aili',
    age:25,
    sex:'male',
    hasJob:true
}

// 上述定义有点问题 如果少一个多一个就报错 有点死板 
// 可选属性
interface Person {
    name:String
    age:number
    sex?:String
    hasJob?:boolean
}

let aili: Person = {
    name: 'aili',
    age:25
}

// 任意类型
interface Person {
    [propName: string]:string | number | boolean
}

let aili: Person = {
    name: 'aili',
    age:25,
    hasJob:true
}

// 定义了三种类型 但是 定义变量的时候 给了any 这是会报错的
interface Person {
    [propName: string]:string | number | boolean
}

let aili: Person = {
    name: 'aili',
    age:25,
    hasJob:true,
    sex: any = {

    }
}

// 只读属性
interface Person {
    readonly id: number
    [propName: string]:any
}

let aili: Person = {
    id:1234,
    name: 'aili',
    age:25,
    hasJob:true,
    sex: {
        a:'male',
        b:'female',
        c:'unknown'
    }
}
数组类型

方法比较多

// 数组类型
let arr: number[] = [1,2,3,4,5]
let arr: string[] = ['1','2','3','4','5']
let arr: Array<number> = [1,2,3,4,5] //泛型
interface mineArr {
    [index: number]: string
}
let arr:mineArr = ['a','b','c','d','e']  //一下觉得好规范 严谨 慢慢感受到ts的类型检查的强大

let list:any[] = [1,'a',true,{name:'aili'}]
函数类型

函数可以看成跟数据类型一样 最灵活的
js函数式编程编程指南
这本书好像很牛皮的样子 一共10章

定义函数

  • 函数声明
    function sum(x, y) {
        return x + y;
    }
    
  • 函数表达式
    let mySum = function (x, y) {
        return x + y;
    };
    
// 函数类型
let mySum = function (x: number, y: number): number {
    return x + y;
};


// // 接口定义函数形状 你要对你将实现的函数 有个很明确具体的认识和实现思路 才可以把接口定义的很完美
interface Search {
    (a:string,b:string): boolean
}
let mysearch: Search;

mysearch = (a:string,b:string)=>{
    return a.search(b) !== -1
}

// 可选参数 还是跟类型定义一样 加个问号就可以了  
// 可选参数后面不允许再出现 必须 参数了
// 顺序 必选参数... 可选参数
function buildName(firstName: string, lastName?: string) {
    if (lastName) {
        return firstName + ' ' + lastName;
    } else {
        return firstName;
    }
}
let tomcat = buildName('Tom', 'Cat');
let tom = buildName('Tom');


// 还有一种情况就是默认参数不受参数位置影响 默认参数自动识别为可选参数
function buildName(firstName: string = 'Tom', lastName: string) {
    return firstName + ' ' + lastName;
}
let tomcat = buildName('Tom', 'Cat');
let cat = buildName(undefined, 'Cat');

// 剩余参数  
// 用到了es6的rest参数 和析构
function push(array: any[], ...items: any[]) {
    items.forEach(function(item) {
        array.push(item);
    });
}
let a = [];
push(a, 1, 2, 3);

声明文件

合理使用第三方库 不冲突 我是这么理解的 定义一些全局方法 属性 变量 类等
具体写法具体查

文章参考的链接
箭头函数
函数参数的默认值
Rest参考值
symbol

END

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容