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>
相关推荐
时间的情敌20 分钟前
Vue3 + Cesium 实战:本地上传 GLB 模型、模型上叠加 GLB、点击控制透明度
前端·vue.js·cesium
拖孩24 分钟前
流量主门槛从 500 降到 100,我的小程序上线 18 小时够到了线
前端·后端·微信小程序
深蓝AI32 分钟前
编码 Agent 的界面味靠提示词压不住:Impeccable 用无模型规则拦同一套模板
前端·程序员
January12072 小时前
【AI方法笔记】2026-11-02:模型流式吐 JSON 时,前端会遇到四种崩法
前端·人工智能·笔记·json
asdzx672 小时前
C# 操作 PDF 元数据:从属性写入到字段提取的完整流程
前端·pdf·c#
吹什么轩2 小时前
constexpr 完全指南:从 const 的两种含义,到编译期计算的四次演进
java·前端·javascript
Bruce_Liuxiaowei3 小时前
前端校验登录态,等于没校验——一次应急广播终端高危漏洞的发现与报送
运维·前端·安全
Meta Luo3 小时前
AI 时代,Web 自动化测试该怎么做?
前端·人工智能·playwright 替代工具·无代码自动化测试工具·低代码 ui 自动化测试·web 回归测试工具
去伪存真3 小时前
AI Agent 性能评估指标与自动化测试落地方案
前端·agent
MaAidan3 小时前
用 Agent 排查线上问题:SLS 日志分析 + DB/Redis 数据验证,一条链路搞清楚
前端·bootstrap·html