TypeScript—学习笔记

TypeScrip基本介绍

TypeScript是一个编译到纯JS的有类型定义的JS超集。
TS遵循当前以及未来出现的ECMAScript规范。TS不仅能兼容现有的JavaScript 代码,它也拥有兼容未来版本的JavaScript的能力。大多数TS的新增特性 都是基于未来的JavaScript提案,这意味着许多TS代码在将来很有可能会变成ECMA的标准.

配置文件生成
npx tsc
标准库声明
"target": "es5"
中文错误消息
npx tsc --local zh_CN
作用域的问题
const a = 222;
export { }// 表示当前文件属于一个模块,变量a属于独立作用域,确保跟其他文件中a变量不会冲突
原始数据类型

布尔类型:boolean

数字类型:number

字符串类型:string

空值:void

Null 和 Undefined:null 和 undefined

Symbol 类型:symbol

BigInt 大数整数类型:bigint

Object类型

泛指除了原始类型以外的其他类型

const foo: object = function () { }
const obj: { foo: number, bar: string } = { foo: 123, bar: 'string' };
数组类型
const arr1: Array<number> = [1, 2, 3,];
const arr2: number[] = [1, 2, 3,];
元组类型

数组中元素的数据类型都一般是相同的(any[] 类型的数组可以不同),如果存储的元素数据类型不同,则需要使用元组。元组中允许存储不同类型的元素,元组可以作为参数传递给函数,一般用于在一个函数之中返回多个返回值。

var mytuple = [10,"Runoob"]; // 创建元组
console.log(mytuple[0]) 
console.log(mytuple[1])
枚举类型

枚举类型主要用于标识代码状态,是一个标识符.当我们需要表示某些变量表示什么意思时,可以通过枚举类型

语法:(枚举类型首字母大写)

enum Schedule {
  not = 1,
  reported,
  stored,
}
函数类型
// 函数类型
export { } // 限制变量作用域

function aa(a: number, b: string) {
    console.log(a,b)
}
aa(4,'m')
任意类型
// 任意类型
export { } // 限制变量作用域

let aa: any = 99;
aa = 'kkk'
隐式类型推断
// 函数类型
export { } // 限制变量作用域

let aa = 99;
aa = 'kkk'
接口

约定一个对象中有哪些成员以及这些成员的类型

// 接口,约定对象的成员
export { } // 限制变量作用域

interface Post {
    title: string,
    content: string
}
function printPost(post: Post) {
    console.log(post.title)
    console.log(post.content)
}
printPost({
    title: 'hello TypeScript',
    content: 'A javascript superset'
})

可选成员、只读成员

interface Post {
    title: string,
    content: string,
    subtitle?: string,// 可选成员, 可有可无
    readonly summary: string// 只读成员
    // [key:string]:string,
}
function printPost(post: Post) {
    console.log(post.title)
    console.log(post.content)
}
printPost({
    title: 'hello TypeScript',
    content: 'A javascript superset',
    summary: 'lll'
})

动态成员

interface Cache {
    [prop: string]: string
}
const cache: Cache = {
    'mmm': 'kkk'
}
console.log('cache',cache)

Typescript中类的基本使用

类用来描述一类具体对象的抽象成员

// 类(class)
export { } // 限制变量作用域

class Person {
    name: string
    age: number // 类的属性必须有初始值
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age
    }
    sayHi(msg: string): number {
        return 222
    }
}

typeScript类的访问修饰符

控制类中成员的可访问级别(共有,私有,受保护)

// 类(class)
export { } // 限制变量作用域

class Person {
    public name: string
    private age: number // 类的属性必须有初始值
    protected gender:boolean
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age
        this.gender = true
    }
    sayHi(msg: string): number {
        return 222
    }
}
const tom = new Person('tom', 18)
console.log(tom.name)

class Student extends Person{
    constructor(name:string,age:number){
        super(name,age)
        console.log(this.gender)
    }
}
class Student extends Person {
    private constructor(name: string, age: number) {
        super(name, age)
        console.log(this.gender)
    }
    static create(name: string, age: number) {
        return new Student(name, age)
    }
}
const jack = Student.create('jack',25)

只读属性

// 类(class)
export { } // 限制变量作用域

class Person {
    public name: string
    private age: number // 类的属性必须有初始值
    protected readonly gender: boolean // 只读属性
    constructor(name: string, age: number) {
        this.name = name;
        this.age = age
        this.gender = true
    }
    sayHi(msg: string): number {
        return 222
    }
}
const tom = new Person('tom', 18);
tom.gender = false;(不被允许)
console.log(tom.name)

类与接口

// 类(class)
export { } // 限制变量作用域
// 一个接口只约束一个能力,一个类型同时实现多个接口
interface Eat {
    eat(food: string): void
}
interface Run {
    run(distance: number): void
}
// 一个类通过关键字implements声明自己使用一个或者多个接口
class Person implements Eat, Run {
    eat(food: string): void {
        console.log(`优雅的进餐:${food}`)
    }
    run(distance: number) {
        console.log(`直立的行走:${distance}`)
    }
}
class Animal implements Eat, Run {
    eat(food: string): void {
        console.log(`呼噜呼噜的吃:${food}`)
    }
    run(distance: number) {
        console.log(`爬行:${distance}`)
    }
}

抽象类

// 抽象类(class)它可以包括一些具体实现,接口不包括具体实现
export { } // 限制变量作用域

// 抽象类只能被集成不能被实例化
abstract class Animal {
    eat(food: string): void {
        console.log(`呼噜呼噜的吃:${food}`)
    }
    // 当父类中有抽象方法时,子类就必须去实现这个方法
    abstract run(distance: number): void
}

class Dog extends Animal {
    run(distance: number): void {
        console.log(`四角爬行`, distance)
    }
}
const d = new Dog();// 同时拥有父类中实例方法以及子类中实现的方法

泛型

// 泛型 
export { } // 限制变量作用域
//
function creatNumberArray<T>(length: number, value: number): number[] {
    const arr = Array<number>(length).fill(value)
    return arr

}
function creatArray<T>(length: number, value: T): T[] {
    const arr = Array<T>(length).fill(value)
    return arr

}
// 定义的时候不能明确的类型变成一个参数,在使用的时候传入
const res = creatArray<string>(3, '100');

类型声明

// 类型声明
import { camelCase } from 'lodash'
import qs from 'query-string'
// cameCase把字符串转为驼峰格式

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

推荐阅读更多精彩内容