首页 > 其他分享 >TS-语法介绍

TS-语法介绍

时间:2024-06-16 17:57:15浏览次数:15  
标签:name age TS 介绍 number 语法 let 类型 string

1. 基本语法

变量声明

TypeScript 中的变量声明方式有 letconstvar,推荐使用 letconst

let isDone: boolean = false;
const PI: number = 3.14;

函数

函数声明与 JavaScript 类似,但可以指定参数和返回值类型。

function add(x: number, y: number): number {
    return x + y;
}

解构赋值

解构赋值允许从数组或对象中提取值,分别赋给不同的变量。

let [a, b] = [1, 2];
let { name, age } = { name: "John", age: 30 };

展开运算符

展开运算符可以用于数组和对象。

let arr = [1, 2, 3];
let newArr = [...arr, 4, 5];

let obj = { name: "John", age: 30 };
let newObj = { ...obj, location: "USA" };

2. 类型系统

基本类型

TypeScript 提供了丰富的基本类型,包括 booleannumberstringarraytupleenumanyvoidnullundefinednever

let isDone: boolean = false;
let age: number = 30;
let userName: string = "John";
let numbers: number[] = [1, 2, 3];
let tuple: [string, number] = ["John", 30];
enum Color {Red, Green, Blue}
let color: Color = Color.Green;

联合类型

联合类型表示一个值可以是几种类型之一。

let value: string | number;
value = "Hello";
value = 42;

交叉类型

交叉类型将多个类型合并为一个类型,包含了所需的所有类型特性。

interface Person {
    name: string;
}

interface Employee {
    employeeId: number;
}

type EmployeePerson = Person & Employee;

let emp: EmployeePerson = {
    name: "John",
    employeeId: 1234
};

类型别名

类型别名可以为任意类型创建新名称。

type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;

function getName(n: NameOrResolver): Name {
    if (typeof n === "string") {
        return n;
    } else {
        return n();
    }
}

类型断言

类型断言有两种形式:尖括号语法和 as 语法。

let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

3. 接口

接口用于定义对象的类型。

interface Person {
    name: string;
    age: number;
}

let john: Person = { name: "John", age: 30 };

接口还可以描述函数类型和可索引类型。

interface SearchFunc {
    (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function (src: string, sub: string): boolean {
    return src.search(sub) !== -1;
};

4. 类

类是 TypeScript 中的核心概念,用于定义对象的蓝图。

class Person {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    greet() {
        console.log(`Hello, my name is ${this.name}`);
    }
}

let john = new Person("John");
john.greet();

继承

类可以通过继承来复用代码。

class Employee extends Person {
    employeeId: number;
    constructor(name: string, employeeId: number) {
        super(name);
        this.employeeId = employeeId;
    }
    work() {
        console.log(`${this.name} is working`);
    }
}

let emp = new Employee("John", 1234);
emp.greet();
emp.work();

接口与类

类可以实现接口,从而强制类遵循接口的结构。

interface IPerson {
    name: string;
    greet(): void;
}

class Person implements IPerson {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    greet() {
        console.log(`Hello, my name is ${this.name}`);
    }
}

修饰符

TypeScript 支持访问修饰符:public(默认)、privateprotected

class Person {
    public name: string;
    private age: number;
    protected gender: string;
    constructor(name: string, age: number, gender: string) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
}

5. 泛型

泛型使得函数和类可以处理不特定的类型,从而更具复用性。

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

let output1 = identity<string>("myString");
let output2 = identity<number>(100);

泛型类和泛型接口也广泛应用于 TypeScript。

class GenericNumber<T> {
    zeroValue: T;
    add: (x: T, y: T) => T;
}

let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function (x, y) {
    return x + y;
};

6. 模块

模块是 TypeScript 中组织代码的主要方式,使用 importexport 关键字。

// math.ts
export function add(x: number, y: number): number {
    return x + y;
}

// app.ts
import { add } from './math';
console.log(add(2, 3));

7. 命名空间

命名空间用于在一个文件中组织代码,防止全局作用域污染。

namespace Validation {
    export interface StringValidator {
        isAcceptable(s: string): boolean;
    }

    export const lettersRegexp = /^[A-Za-z]+$/;
}

// 使用命名空间
let validator: Validation.StringValidator;
validator = { isAcceptable: s => Validation.lettersRegexp.test(s) };

8. 装饰器

装饰器是一种特殊的声明,附加在类声明、方法、访问符、属性或参数上。需要在 tsconfig.json 中启用 experimentalDecorators

function sealed(constructor: Function) {
    Object.seal(constructor);
    Object.seal(constructor.prototype);
}

@sealed
class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return `Hello, ${this.greeting}`;
    }
}

总结

TypeScript 提供了丰富的语法特性,使得 JavaScript 的开发更具类型安全性和可维护性。从基本语法到高级特性,掌握这些语法特性可以极大提升开发效率和代码质量。希望这篇文章能帮助你全面理解和使用 TypeScript。

标签:name,age,TS,介绍,number,语法,let,类型,string
From: https://blog.csdn.net/m0_72560900/article/details/139722189

相关文章

  • 【CICID】GitHub-Actions语法
    目录【CICID】GitHub-Actions语法1场景2CI/CD2.1什么是CI/CD2.2持续集成(CI)2.3持续部署(CD)3介绍3.1优点4工作流常用语法4.1name:工作流名称4.2on:触发工作流时机4.3jobs:作业5环境变量5.1自定义变量5.1.1在env中定义变量5.1.2Run通过写入到github变量5.2......
  • 【MATLAB】语法
    MATLAB基本语法(%{和%})赋值函数名=值;forfori=1:10循环语句end//whilex=0;sum=0;whilex<100 sum=sum+x; x++;end//ififx>1 f=x^2+1;else f=2*xendswitchonum=input('请输入一个数');switchnumcase-1//注意case后面......
  • jQuery引入,基本选择器和关系选择器,组合选择器,分组与嵌套,基本筛选器,属性选择器,前
    ⅠjQuery引入【一】什么是jQuery【1】概述jQuery是一个轻量级的、兼容多浏览器的JavaScript库。jQuery使用户能够更方便地处理HTMLDocument、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Writeless,domore.“【2】小结jQ......
  • 解决vue项目报错 ERROR in Conflict:Multiple assets emit different content to the
    vue-cli创建项目ERROR in Conflict: Multiple assets emit different content to the same filename index.html问题的解决办法用vue-cli正常来创建新的项目在运行npmrundev或者npmrunserve有以下报错:ERRORinConflict:Multipleassetsemitdifferentco......
  • 探索Web Components
    title:探索WebComponentsdate:2024/6/16updated:2024/6/16author:cmdragonexcerpt:这篇文章介绍了WebComponents技术,它允许开发者创建可复用、封装良好的自定义HTML元素,并直接在浏览器中运行,无需依赖外部库。通过组合HTML模板、ShadowDOM、自定义元素和HTML......
  • CV_WRAP和CV_EXPORTS_W
    CV_EXPORTS_Wisdefinedinmodules/core/include/opencv2/core/types_c.hasaliasforCV_EXPORTS,CV_EXPORTSisdefinedas:#if(definedWIN32||defined_WIN32||definedWINCE)&&definedCVAPI_EXPORTS#defineCV_EXPORTS__declspec(dllexport)#el......
  • 天笑的个人介绍
    自我介绍你好,我是一名网络安全爱好者,也是这个博客的主笔。高中时期就对网络安全产生了浓厚的兴趣,但是高考却离自己喜欢的的学校,自己喜欢的的专业仅差一步之遥(1分)。现在,某二本大学网络工程专业,经过一年多学习,我发现自己还是更加喜欢网络安全。因此我选择了,业余的时候去学习网络......
  • ants:强大的高性能与低成本 Go 协程池
    ants:强大的高性能与低成本Go协程池原创 K8sCat 源自开发者 2024-06-1611:28 广东 听全文源自开发者专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。256篇原创内容公众号在开发高并发程序时,管理并发......
  • HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)
    ......
  • 全面的初级入门指南,从安装到基本使用,再到一些高级功能的介绍,帮助用户在实际操作中逐步
    大纲:WindowsNmap初级使用教程1.简介什么是Nmap?Nmap的主要功能和用途安全和法律注意事项2.安装Nmap前提条件从官方网站下载Nmap安装步骤验证安装3.基本使用打开命令提示符运行你的第一个Nmap扫描示例命令:nmap目标IP地址理解基本的输出结果4.常用扫......