当前位置: 首页 > news >正文

TypeScript之基础知识

基础知识


1. 基本类型
类型描述
string字符串(如 "hello"
number数字(整数或浮点数,支持二进制、八进制、十六进制)
boolean布尔值(true/false
null空值(需显式声明)
undefined未定义值(需显式声明,严格模式下不可隐式赋值)
symbol唯一且不可变的值(通过Symbol()创建)
object狭义对象(如对象、数组、函数,不包括原始类型)
any关闭类型检查(谨慎使用!)
void表示无返回值的函数
never永不返回的函数(如抛出错误或无限循环)

2. 接口与类型别名
  • 接口(Interface)

    interface User {name: string;age: number;isAdmin?: boolean; // 可选属性
    }
    
  • 类型别名(Type Aliases)

    type UserID = string | number; // 联合类型
    type Point = [number, number]; // 元组类型
    

3. 函数类型
// 参数与返回值类型
function add(a: number, b: number): number {return a + b;
}// 可选参数与默认值
function greet(name: string, greeting: string = "Hello"): string {return `${greeting}, ${name}`;
}// 剩余参数
function sum(...nums: number[]): number {return nums.reduce((a, b) => a + b, 0);
}

4. 泛型
// 泛型函数
function identity<T>(arg: T): T {return arg;
}// 泛型类
class GenericBox<T> {private value: T;constructor(value: T) { this.value = value; }getValue(): T { return this.value; }
}

5. 联合类型与类型守卫
// 联合类型
let value: string | number = "TypeScript";
value = 42;// 类型守卫
function logValue(value: string | number) {if (typeof value === "string") {console.log(value.toUpperCase());} else {console.log(value.toFixed(2));}
}

6. Vue 中的 TypeScript 使用

6.1 安装与配置
  • Vue CLI 项目

    vue create my-project --default
    # 选择 TypeScript 支持
    
  • Vite 项目

    npm create @vitejs/app my-project -- --template vue-ts
    
  • 手动配置

    • 安装依赖:

      npm install vue @vue/runtime-core @vue/compiler-sfc
      npm install typescript @types/node --save-dev
      
    • 创建 tsconfig.json

      {"compilerOptions": {"target": "ESNext","module": "ESNext","strict": true,"moduleResolution": "node","esModuleInterop": true,"skipLibCheck": true,"sourceMap": true},"include": ["src/**/*.ts", "src/**/*.vue"]
      }
      

6.2 Vue 组件的 TypeScript 写法
  • Options API

    <script lang="ts">
    import { defineComponent } from 'vue';interface User {name: string;age: number;
    }export default defineComponent({data() {return {user: {} as User, // 强制类型};},methods: {greet(): void {console.log(`Hello ${this.user.name}`);}}
    });
    </script>
    
  • Composition API

    <script setup lang="ts">
    import { ref } from 'vue';interface User {name: string;age: number;
    }const user = ref<User>({name: "Alice",age: 25
    });const greet = (): void => {console.log(`Hello ${user.value.name}`);
    };
    </script>
    

6.3 Props 类型定义
<script setup lang="ts">
import type { PropType } from 'vue';interface User {id: number;name: string;
}defineProps({user: {type: Object as PropType<User>,required: true},count: {type: Number as PropType<number>,default: 0}
});
</script>

6.4 响应式数据与类型推断
<script setup lang="ts">
import { ref, reactive } from 'vue';// ref
const count = ref<number>(0); // 显式类型
const message = ref("Hello"); // 推断为 string// reactive
const state = reactive({user: {name: "Alice",age: 25}
});
</script>

6.5 Vue 的类型定义文件

Vue 提供了类型定义文件(如 @vue/runtime-core),可直接使用内置类型:

import { Ref, ComputedRef } from 'vue';const count: Ref<number> = ref(0);
const double: ComputedRef<number> = computed(() => count.value * 2);

7. 常见问题与最佳实践
  1. 如何处理 nullundefined

    // 开启 strictNullChecks
    function safeLog(value: string | null) {if (value !== null) {console.log(value.length); // 确定非 null}
    }
    
  2. 避免过度使用 any

    let data: unknown = "TypeScript";
    if (typeof data === "string") {console.log(data.toUpperCase());
    }
    
  3. Vue 中的类型断言

    <script setup lang="ts">
    const element = document.getElementById("app") as HTMLDivElement;
    element.style.color = "red";
    </script>
    

http://www.xdnf.cn/news/197425.html

相关文章:

  • vue报错:Loading chunk * failed,vue-router懒加载出错问题。
  • C++复习补充 类型转换和RTTI
  • 人工智能与机器学习:Python从零实现K-Means 算法
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索优化)
  • 驱动开发硬核特训 │ Regulator 子系统全解
  • 企业架构之旅(2):解锁TOGAF ADM
  • 什么是 DDoS 攻击?高防 IP 如何有效防护?2025全面解析与方案推荐
  • 风力发电领域canopen转Profinet网关的应用
  • echarts X轴是日期,Y轴是文字
  • 【mysql】python+agent调用
  • 算法相关概念
  • Python创意爱心代码分享指南
  • 信号完整性简介第一篇
  • C++中的格式化字符串
  • TMI投稿指南(二):投稿文章注意事项
  • JAVA设计模式——(八)单例模式
  • 详解UnityWebRequest类
  • 02_使用 AES 算法实现文件加密上传至阿里云、解密下载
  • 阿里云ftp服务器登录要怎么做?如何访问ftp服务器?
  • 【权限模型】RBAC模型详解
  • 东莞SMT贴片加工工艺优化解析
  • 青年座谈会的读书汇报
  • Kotlin DSL 深度解析:从 Groovy 迁移的困惑与突破
  • vue3 如何设置全局属性
  • Docker的常用命令
  • WPF之Button控件详解
  • Crusader Kings III 王国风云 3(十字军之王 3) [DLC 解锁] [Steam] [Windows SteamOS macOS]
  • 多元函数微分之传统方法和全微分法
  • Qt笔记-自定义托盘弹出界面
  • 用于表格数据的神经网络分类器_TabPFN