TypeScript 模版字面量与类型操作

下面这段代码是Vue3中的一些用法

TypeScript 复制代码
<template>
    <div class="title">
        <el-text class="txt">模版语法</el-text>
    </div>
    <div class="content">
        <div class="section">
            <el-text class="section-title">模版字面量基本语法</el-text>
            <el-text class="section-content">{{ myShirt }}</el-text>
        </div>
        <div class="section">
            <el-text class="section-title">工具类型组合</el-text>
            <el-text class="section-content">MouseEvent 类型: {{ mouseEvent }}</el-text>
            <el-text class="section-content">keyEvent 类型: {{ key_Event }}</el-text>
            <el-text class="section-content">FullName 类型: {{ fullName }}</el-text>
        </div>
        <div class="section">
            <el-text class="section-title">组合多个类型操作</el-text>
            <el-text class="section-content">Getter 和 Setter 示例: {{ getName }}, {{ setAge }}, {{ getEmail }}</el-text>
        </div>
        <div class="section">
            <el-text class="section-title">标签函数类型</el-text>
            <el-text class="section-content">{{ greeting }}</el-text>
        </div>
    </div>
</template>

<script setup lang="ts">
import { type } from "os";

// 模版字面量基本语法示例代码
type Color = 'red' | 'green' | 'blue';
type Size = 'small' | 'medium' | 'large';
type Shirt = `${Size} ${Color} Shirt`;

const myShirt: Shirt = 'medium red Shirt'; // 有效
// const myShirtInvalid: Shirt = 'extra large yellow Shirt'; // 无效,会报错


// 工具类型组合
type EventName<T extends string> = '${T}Changed';
type Concat<T extends string, U extends string> = `${T}_${U}`;
type MouseEvent = EventName<"mouse">; // "mouseChanged"
type keyEvent = EventName<"key">; // "keyChanged"
type FullName = Concat<"firstName", "lastName">; // "firstName_lastName"

const mouseEvent: MouseEvent = "mouseChanged";
const key_Event: keyEvent = "keyChanged";
const fullName: FullName = "firstName_lastName";

// 组合多个类型操作
type GetterName<T extends string> = `get${Capitalize<T>}`;
type SetterName<T extends string> = `set${Capitalize<T>}`;
type Accessor<T extends string> = GetterName<T> | SetterName<T>;
type propers = "name" | "age" | "email";
type Accessors = Accessor<propers>;
const getName: Accessors = "getName";
const setAge: Accessors = "setAge"; 
const getEmail: Accessors = "getEmail";

// 标签函数类型
type TemplateTagFunction<T extends string[]> = (strings: T, ...values: any[]) => string;
const myTemplateTagFunction: TemplateTagFunction<['Hello, ', '!']> = (strings, ...values) => {
    return strings[0] + values.join('') + strings[1];
};
const greeting = myTemplateTagFunction`Hello, ${'World'}!`; // "Hello, World!"



</script>

<style lang="scss" scoped>

.title {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 80px;
  margin-bottom: 20px;

  .txt {
    font-size: 34px;
    font-weight: bold;
    color: #333;
  }
}

.content {
  .section {
    margin-bottom: 20px;

    .section-title {
      font-size: 18px;
      font-weight: bold;
      margin-bottom: 10px;
      color: #555;
      display: block;
    }

    .section-content {
      font-size: 16px;
      color: #666;
      margin-left: 20px;
      display: block;
    }
  }
}

</style>
相关推荐
alice--小文子20 小时前
cursor-mcp工具使用
java·服务器·前端
晚霞的不甘20 小时前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
小迷糊的学习记录20 小时前
0.1 + 0.2 不等于 0.3
前端·javascript·面试
梦帮科技21 小时前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json
VT.馒头21 小时前
【力扣】2695. 包装数组
前端·javascript·算法·leetcode·职场和发展·typescript
css趣多多21 小时前
一个UI内置组件el-scrollbar
前端·javascript·vue.js
C澒1 天前
前端整洁架构(Clean Architecture)实战解析:从理论到 Todo 项目落地
前端·架构·系统架构·前端框架
C澒1 天前
Remesh 框架详解:基于 CQRS 的前端领域驱动设计方案
前端·架构·前端框架·状态模式
Charlie_lll1 天前
学习Three.js–雪花
前端·three.js
onebyte8bits1 天前
前端国际化(i18n)体系设计与工程化落地
前端·国际化·i18n·工程化