TypeScript学习笔记

这篇博客详细介绍了TypeScript的基础知识,包括其类型系统、类型推论、标记使用以及类型定义等方面。作者强调了TypeScript如何增强编辑器功能,提供代码补全和类型检查,并探讨了如何与JavaScript项目渐进式融合。此外,还讨论了如何处理第三方库的类型声明、编写类型声明文件的场景以及TypeScript的编译选项。
摘要由CSDN通过智能技术生成

简介

什么是 TypeScript

  • TypeScript 是一门静态类型、弱类型的语言,它给JavaScript增加了类型系统,适用于任何规模的项目。
  • TypeScript 增强了编辑器(IDE)的功能,提供了代码补全、接口提示、跳转到定义、代码重构等能力。
  • TypeScript 具有类型推论的能力,大部分类型都不需要手动声明。
  • TypeScript 拥有活跃的社区,大多数常用的第三方库都提供了类型声明。
  • TypeScript 可以编译为 JavaScript,它不会修改 JavaScript 运行时的特性。
  • TypeScript 拥有很多编译选项,类型检查的严格程度由你决定。
  • TypeScript 可以和 JavaScript 共存,这意味着 JavaScript 项目能够渐进式的迁移到 TypeScript。
  • TypeScript 与标准同步发展,符合最新的 ECMAScript 标准(stage 3)。

安装 TypeScript

npm install -g typescript
tsc hello.ts

标记使用

这部分偏重于使用类型来给各种东西标注类型

类型推论

let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.

任意类型

let something;
something = 'seven';
something = 7;

something.setName('Tom');

等价于

let something: any;
something = 'seven';
something = 7;

something.setName('Tom');

永远不类型

function throwError(message: string): never {
   
    throw new Error(message);
}

function infiniteLoop(): never {
   
    while (true) {
   
        // do something
    }
}

原始数据类型

let decLiteral: number = 6;
let myName: string = 'Tom';
let isDone: boolean = false;
function alertName(): void {
   
    alert('My name is Tom');
}
let num: number = undefined; //undefined 和 null 是所有类型的子类型

数组的类型

let fibonacci: number[] = [1, 1, 2, 3, 5];
let fibonacci: Array<number> = [1, 1, 2, 3, 5];
interface NumberArray {
   
    [index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5];

对象的类型

单层

interface Person {
   
    readonly id: number; //只读属性
    name: string;
    age?: number; //可选属性
    [propName: string]: any; //任意属性
}

let tom: Person = {
   
    id: 89757,
    name: 'Tom',
    gender: 'male'
};
function printCoord(pt: {
    x: number; y: number }) {
   
  console.log("The coordinate's x value is " + pt.x);
  console.log("The coordinate's y value is " + pt.y);
}

printCoord({
    x: 3, y: 7 });

多层

interface Address {
   
    street: string;
    city: string;
}

interface Person {
   
    name: string;
    age: number;
    address: Address; // 在 Person 类型中嵌套了 Address 类型
}

// 创建一个符合 Person 类型的对象
const person: Person = {
   
    name: 'Alice',
    age: 30,
    address: {
   
        street: '123 Main St',
        city: 'New York'
    }
};

interface Person {
   
    name: string;
    age: number;
    address: {
   
        street: string;
        city: string;
    };
}

// 创建一个符合 Person 类型的对象
const person: Person = {
   
    name: 'Bob',
    age: 25,
    address: {
   
        street: '456 Elm St',
        city: 'Los Angeles'
    }
};

函数的类型

function sum(x: number, y: number): number {
   
    return x + y;
}
let mySum = function 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值