0

0

学习 Typescript 的旅程

聖光之護

聖光之護

发布时间:2024-11-08 12:55:57

|

349人浏览过

|

来源于dev.to

转载

学习 typescript 的旅程大家好,我最近开始了我的 typescript 之旅,并通过编程英雄的高级 web 开发课程取得了进步。我对 typescript 有一些基础知识,但没有深入探索。我的课程从深入研究 typescript 开始。一周过去了,我的学习有了很大的进步。以下是我所掌握的关键概念的简化概述。

typescript 就像 javascript,但具有超能力!

typescript 是 javascript 的超集,为该语言添加了可选的静态类型。这意味着您可以声明变量、函数参数和返回值的类型,这有助于在开发过程的早期发现潜在的错误。
使用 typescript 的好处

  • 早期错误检测
  • 提高代码可读性
  • 增强代码可靠性
  • 更好的代码完成和 intellisense
  • 大型项目支持

原始和非原始数据类型

原始数据类型表示单个值并直接存储在内存中。以下是 typescript 中使用的一些原始数据类型

  • 字符串
  • 数字
  • 布尔值
  • 未定义
let name : string = "kishor";
let age : number = 27;
let isdeveloper: boolen = true;
let x : null = null;
let y: undefined = undefined;

正如您在示例中看到的,要为变量分配类型,您必须在定义变量名称和类型后使用冒号 ( :) 符号。

非原始数据类型,也称为引用类型,表示复杂的数据结构,并存储为对内存位置的引用。 typescript 支持以下非原始数据类型:

  • 对象
  • 数组
  • 元组
  • 功能
let person: {name: string, age : number} = {name: "kishor", age: 27}; //object
let numbers: number[] = [1,2,3,4];
let fruits: string[]= ["apple", "pineapple", "banana"];
let tuple: [string, number, boolean] = ["xyz", 123, true];
function greet(name: string) : any {
  return `hello ${name}`
}

类型别名

typescript 中的类型别名是一种为​​现有类型赋予新名称的方法。这可以使您的代码更具可读性和可维护性,尤其是在处理复杂类型时。

// defining a type alias for a person object
type person = {
  name: string;
  age: number;
};
// using the type alias
const person1: person = {
  name: "alice",
  age: 30
};

在此示例中,person 是一个类型别名,表示具有名称和年龄属性的对象。
typescript 中的并集和交集类型
联合类型表示可以是多种类型之一的值。它是使用 | 定义的运算符。
交叉类型将多种类型合并为一种类型。它是使用 & 运算符定义的。

type stringornumber = string | number; //union type
let value: stringornumber = "hello";
value = 42;
type person = {
    name: string;
    age: number;
};
type address = {
    street: string;
    city: string;
};
type personwithaddress = person & address;//intersection type
const personwithaddress: personwithaddress = {
    name: "alice",
    age: 30,
    street: "123 main st",
    city: "anytown"
};

从未、未知

never 类型表示从未出现过的值。
未知类型代表任何值。它比 any 类型更安全,因为在使用未知类型的值之前必须执行类型检查或断言。

function error(message: string): never {
    throw new error(message);
} //the return type is never because there is no data returned.
let value: unknown = "hello";
if (typeof value === "string") {
  let strlength: number = value.length;
}

类型断言

类型断言是一种告诉 typescript 编译器您比它更了解类型的方法。这是一种显式指定变量类型的方法

let value: unknown = "hello";
let strlength: number = (value as string).length;

类型保护装置

类型保护允许您根据某些条件缩小变量的类型范围。通过在访问变量的属性或方法之前检查变量的类型,您可以避免潜在的运行时错误。

  • 运算符类型
  • 实例操作符
//typeof
function printvalue(value: unknown) {
    if (typeof value === "string") {
        console.log(value.touppercase());
    } else if (typeof value === "number") {
        console.log(value.tofixed(2));   
    }
}
//instanceof
function printdate(date: unknown) {
    if (date instanceof date) {
        console.log(date.toisostring());
    }
}

typescript 中的接口

typescript 中的接口是用于创建具有特定属性的对象的蓝图。

interface person {
  firstname: string;
  lastname: string;
  age: number;
}
const person1: person = {
  firstname: "alice",
  lastname: "johnson",
  age: 30
};

在此示例中,person 接口定义了 person 对象必须具有firstname、lastname 和age 属性。创建 person1 对象时

typescript 中的泛型

泛型是 typescript 中的一项强大功能,它允许您创建可以处理不同数据类型的可重用组件。

function identity<t>(arg: t): t {
  return arg;
}
identity<string>(string);

在此示例中,t 是类型参数。它代表任何类型的占位符。当你调用恒等函数时,你可以传递任何类型的参数,函数将返回相同的类型。

Nanonets
Nanonets

基于AI的自学习OCR文档处理,自动捕获文档数据

下载

typescript 中的约束

在 typescript 中,泛型约束允许您对可以作为参数传递给泛型函数或用作泛型类或接口中的类型参数的类型应用限制。

interface person {
    name: string;
    age: number;
}
function identity<t extends person>(arg: t): t {
  return arg;
}
const result  = identity<person>({
    name: "aa";
    age: 12;
});

这里使用extends关键字来约束数据

操作员的钥匙

typescript 中的 keyof 运算符用于获取对象类型的所有属性名称的联合类型。这在使用泛型类型和映射类型时特别有用。

interface person {
  name: string;
  age: number;
}
type personkeys = keyof person; // type: "name" | "age"

实用程序类型

pick<t、k>:从 t 中选择特定属性

type person = {
  name: string;
  age: number;
  email: string;
}
//pick<t,k>
type name = pick<person, "name">;
type nameage = pick<person, "name" | "age">

omit<t、k>:省略 t 中的特定属性

type person = {
  name: string;
  age: number;
  email: string;
}
//omit<t,k>
type email= omit<person, "name" | "age">;

partial<t>:使 t 的所有属性可选。

interface person {
    name: string;
    age: number;
}
type partialperson = partial<person>; // { name?: string; age?: number; }

其他人喜欢,
必填<t>
只读<t>
记录<k、t>

typescript 中的类

在 typescript 中,类是使用 class 关键字定义的。

class person {
    firstname: string;
    lastname: string;

    constructor(firstname: string, lastname: string) {
        this.firstname = firstname;
        this.lastname = lastname;   

    }

    greet() {
        console.log("hello, my name is " + this.firstname + " " + this.lastname);   

    }
}

typescript 中的访问修饰符

public 类成员的默认可见性是public。公共成员可以在任何地方访问
受保护的成员仅对声明它们的类的子类可见。
私人成员只能在班级内访问。

typescript 中的静态成员

typescript 中的静态成员是属于类本身的成员(属性和方法),而不是属于类的各个实例。

class myclass {
    static staticproperty: string = "static property";

    static staticmethod() {
        console.log("static method");
    }
}

在 typescript 中实现

在 typescript 中,接口定义了要实现的类的契约。实现接口的类必须具有接口中声明的所有属性和方法。使用了implements关键字

interface Shape {
    area(): number;
}

class Circle implements Shape {
    radius: number;

    constructor(radius: number) {
        this.radius = radius;
    }

    area():   
 number {
        return Math.PI * this.radius * this.radius;   

    }
}

结论:

这些是我本周学到的 typescript 的一些基本用例。我学到了很多很酷的东西,但还有很多东西有待发现。 typescript 不断发展,因此我努力跟上最新版本和功能,并关注 typescript 的官方文档和博客以获取最新消息和最佳实践。 
感谢您在我的旅途中陪伴我。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

47

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

194

2026.02.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

1

2026.03.13

数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

338

2023.10.31

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

225

2025.10.31

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

138

2026.02.12

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1567

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

TypeScript——十天技能课堂
TypeScript——十天技能课堂

共21课时 | 1.2万人学习

TypeScript-45分钟入门
TypeScript-45分钟入门

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号