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>
相关推荐
尾善爱看海1 分钟前
《JavaScript 数组操作全攻略:12 类 API + 30 个实战场景 + 20 个避坑指南》
前端·javascript·面试
计算机魔术师18 分钟前
Anthropic 估值冲 4 万亿,但企业客户已经偷偷换了便宜模型
前端
王六米。23 分钟前
RAG知识库建设 文档解析 切分与索引如何衔接
服务器·前端·网络·企业数字化转型·智钳智能盒子
名字还没想好☜32 分钟前
React 文件上传实战:预览 URL 回收、多文件逐个进度与拖拽放置区踩坑
前端·react·next.js
console.log('npc')36 分钟前
06 — Model 层:数据模型与操作
前端·后端·node.js·express
linux_cfan1 小时前
16 · `custom-media-element`:属性拦截与转发
前端·javascript·音视频
右耳朵猫AI1 小时前
Web前端周刊2026W38 | React 19.3 发布、StyleX 深潜、jsdom 30.1 提速
前端·javascript·react.js·typescript·node.js
人工智能培训2 小时前
大语言模型:从语言理解到通用智能的跃迁
linux·服务器·前端·人工智能
一拳不是超人2 小时前
做独立开发三个月,我的第一个产品终于有了 1000 个用户
前端·程序员
Amos_Web2 小时前
Rspack 源码解析(十):Hash 与 Asset 生成
前端·rust·源码阅读