typescript学习笔记(一)

本文介绍了TypeScript的基础概念,包括其相对于JavaScript的优势、基本数据类型、接口等,并通过实例展示了如何从TS代码编译到JS代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.认识typescript

typescript是由微软开发的一套编程语言,将其称作是javascript的超集,看过一些ts代码的人可能很明显的能意识到它与js的区别,比如ts添加了静态类型检查,interface接口类型定义和面向对象的一些特性,先看个demo吧。
当然提前需要配置运行环境
npm install -g typescript
通过npm全局安装
创建一个文件后缀为ts的文件
//demo.ts
function howOld(year: number) {
    return "I am " + year;
}

let peopleYear: number = 23;
console.log(howOld(peopleYear));//I am 23
输入命令
tsc demo.ts
可以发现在当前文件的同级目录下生成了一个名为demo.js的文件,打开文件看看
function howOld(year) {
    return "I am " + year;
}
var peopleYear = 23;
console.log(howOld(peopleYear));
这段代码我们就很熟悉了,其实最终编译完成后我们引用的也是后缀为js的文件,而不是ts文件。那么对于ts和js有什么优缺点呢?对于ts来说它使用静态类型检测或者是通过interface设置类型接口,能帮助我们避免了一些由于类型不明确而造成的错误,尤其是在开发较大项目时,开发人员多的同时,对于数据类型造成的错误数量也会大大增加。但是性能上并没有相对js提升太多,而大家更依赖js往往是因为它的灵活性。

二.数据类型

对于typescript来说保留了javascript中我们所能用到的基本数据类型,同样是将javascript和typescript进行比较。
  • Boolean
//typescript写法
let data: boolean = true;
//javascript写法
let data = true;
  • Number
typescript同javascript一样所有的数字都是浮点数,同样支持二进制,八进制,十进制及十六进制。
//typescript写法
let data1: number = 0b1010; 
let data2: number = 0o12;    
let data3: number = 10;    
let data4: number = 0xa;    
//javascript写法
var data1 = 10;
var data2 = 10;
var data3 = 10;
var data4 = 0xa;
  • String
javascript规定字符串用” “或者’ ‘引入,当然typescript也保留了这一点,在这基础上ts也支持使用(`)引入文字。
//typescript写法
let str1: string = 'typescript';
let str2: string = `Hello ${ str1 }.`;
//javascript写法
var str1 = 'typescript';
var str2 = "Hello " + str1 + ".";
  • 数组
//typescript写法
let arr1: number[] = [1,2,3];
let arr2: Array<number> = [1,2,3];
//javascript写法
var arr1 = [1, 2, 3];
var arr2 = [1, 2, 3];
其中<>中写的是数组元素的类型。
  • 元组
元组类型用来表示已知元素数量和类型的数组,元素的数据及类型需要一一对应,否则会报错。
//typescript写法
 let data: [string,number];
 data = ['lilu',23];
 //javascript写法
 var data;
 data = ['lilu', 23];
  • 枚举
//typescript写法
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
//javascript写法
var Color;
(function (Color) {
    Color[Color["Red"] = 0] = "Red";
    Color[Color["Green"] = 1] = "Green";
    Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
var c = Color.Green;
枚举的默认开始序号是0,当然也可以手动赋值。
  • 任意类型
any,当不清楚变量的类型时使用
//typescript写法
let data: any = 1;
data = 'haha';
data = true;
//javascript写法
var data = 1;
data = 'haha';
data = true;
any使变量类型变得灵活起来,就和js中的变量声明一样,因为any在编译的过程中绕过了类型检查。当然ts也允许当不确定数组元素类型的时候这样用:
//typescript写法
let arr: any[] = [1,true,'haha'];
//javascript写法
var arr = [1, true, 'haha'];
  • 空类型
void,表示空类型,一般用来作为函数的返回类型,比如:
//typescript写法
function sayHello(name: string):void{
    console.log(`hello!${ name }`);
}
sayHello('lilu');
//javascript写法
function sayHello(name) {
    console.log("hello!" + name);
}
sayHello('lilu');
当然也可以用void来给变量赋值,但是变量必须是null或者undefined。
//typescript写法
let data: void = null;
data = undefined;
//javascript写法
var data = null;
data = undefined;
  • never
never表示永远不存在值的变量。
//typescript写法
let a: never;
let b: string;
let c: never;
a = 'hello';
b = a;
a = c;
说明never类型可以赋值给任意类型的变量,但是never类型的变量只能被never类型赋值。
以上是一些基本数据类型的语法说明,但是在开发中我们往往遇到的数据类型是嵌套的,比如这样:
let data = [
    {
        name: 'Tom',
        age: 10
    },{
        name: 'Mike',
        age: 15
    }
];
在这种情况下如果只用基本类型是不够的,所以需要引用interface来处理。

接口

先创建一个对象的数据类型
interface obj{
    name: string,
    age: number
}
接着创建一个数组类型。
interface Obj{
    name: string,
    age: number
}
let arr: Array<Obj> = [
    {
        name: 'Tom',
        age: 10
    },
    {
        name: 'Mike',
        age: 15
    }
];
当然接口类型也允许继承,比如我在后续工作中需要添加一些数据类型,如下:
interface Obj1{
    name: string,
    age: number
}
interface Obj2 extends Obj1{
    hobby: string
}
let arr: Array<Obj2> = [
    {
        name: 'Tom',
        age: 10,
        hobby: 'reading'
    },
    {
        name: 'Mike',
        age: 15,
        hobby: 'coding'
    }
]
TypeScript 作为 JavaScript 的超集,通过引入类型系统、泛型、接口等特性,为前端开发带来了更高的类型安全性与代码可维护性。对于初学者而言,掌握其基础知识和使用方法是迈向高效开发的第步。 ### 类型系统基础 TypeScript 的核心在于其强大的类型系统,包括基本类型(如 `number`、`string`、`boolean`)、数组类型、元组类型、枚举类型等。例如,可以显式地声明变量的类型: ```typescript let age: number = 25; let name: string = "Alice"; ``` 此外,还可以使用联合类型(Union Types)来表示个值可以是几种类型之: ```typescript let id: number | string; id = 123; // 合法 id = "abc"; // 合法 ``` ### 接口与类型别名 TypeScript 提供了 `interface` 和 `type` 两种方式来定义自定义类型。`interface` 更适合用于描述对象的形状,而 `type` 则适用于定义联合类型或更复杂的类型组合。例如: ```typescript interface User { name: string; age: number; } type ID = number | string; ``` 两者都可以实现类型定义,但在某些场景下选择其中之更为合适。比如,`interface` 支持继承和实现,适合定义类的结构;而 `type` 更加灵活,可以用于定义联合类型。 ### 泛型 泛型允许在定义函数、接口或类时,不预先指定具体的数据类型,而是在使用时再指定。这种机制提高了代码的复用性和灵活性。例如,定义个通用的数组函数: ```typescript function identity<T>(arg: T): T { return arg; } let output = identity<string>("Hello"); // 返回类型为 string ``` ### Vue 3 中的 TypeScript 使用 在 Vue 3 中,TypeScript 可以与 Composition API 结合使用,提供更强大的类型推导能力。例如,在组件中使用 `ref` 和 `defineComponent`: ```typescript import { defineComponent, ref } from 'vue'; export default defineComponent({ setup() { const message = ref('Hello, Vue with TypeScript!'); return { message }; } }); ``` 通过显式指定泛型参数,可以确保类型的安全性。例如,声明个字符串数组: ```typescript const list = ref([] as string[]); ``` ### 实战建议 1. **快速掌握核心**:建议在 2 小时内通读基础类型、接口、泛型以及 Vue 3 组件的 `props` 和 `emits` 类型声明。 2. **实战开发**:使用 Vite 创建 Vue 3 + TypeScript 项目,实现个带表单验证的组件,结合 `ref`、`computed` 和类型断言。 3. **深入生态**:学习 Vue Router 和 Pinia 的 TypeScript 用法,完成个简单的单页应用(如博客列表 + 用户状态管理)。 ### 学习资源推荐 - **官方文档**:TypeScript 官方文档和 Vue 3 + TypeScript 官方指南是权威的学习资料。 - **工具链**:TypeScript Playground 可用于在线调试 TypeScript 代码,而 Vue Language Server 是 VSCode 中 Vue + TypeScript 的最佳插件。 通过以上内容的学习和实践,可以快速上手 TypeScript,并在实际项目中应用其特性,提升代码质量和开发效率[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值