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>
相关推荐
Old Uncle Tom27 分钟前
银行用户画像 -- 金融目标与需求意图
前端·人工智能·金融
IT_陈寒33 分钟前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端
东方小月33 分钟前
从0开发一个 Coding Agent(一):前言
前端·人工智能·typescript
恋猫de小郭34 分钟前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter
ji_shuke1 小时前
远程排查 Web 系统问题:如何导出 HAR 文件协助定位
前端·问题排查
程序员爱钓鱼1 小时前
Rust String 与 &str 详解:字符串所有权、借用与转换
前端·后端·rust
码农学院1 小时前
GEO与SEO协同:从传统搜索到生成式搜索的平滑迁移路径
服务器·前端·python
咩咩啃树皮10 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
阳光是sunny10 小时前
LangGraph中的Reducer是什么
前端·人工智能·后端