当前位置: 首页 > 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>
    

相关文章:

  • 基于常微分方程的神经网络(Neural ODE)
  • XrayR启动失败
  • 如何查看电脑电池使用情况
  • 嵌入式开发面试典型编程题解析:排序算法、指针操作、字符处理、递归原理等基础原理的深度解析。
  • VS2022+OpenCasCade配置编译
  • C++ —— 正向迭代器与反向迭代器
  • 在服务器中,搭建FusionCompute,实现集群管理
  • KML文件转shp并保留关键字段
  • 【KWDB 创作者计划】_KWDB产品技术解读
  • 【C语言】初阶算法相关习题(二)
  • mapbox V3 新特性,室内楼层多层同时三维展示(可单层切换),类似蜂鸟视图效果
  • 第7讲:图例与标题规范(字号、位置、字体选择技巧)
  • Excel处理控件Aspose.Cells for Go :通过 C++ 实现的设计概念和 API 架构讲解
  • 关于kafka
  • 使用exdp 备份数据库
  • [Agent]AI Agent入门02——ReAct 基本理论与实战
  • 测试反馈陷入死循环?5大策略拆解新旧Bug难题
  • InitializingBean接口和@PostConstruct-笔记
  • 鸢尾花(Iris)数据集的多模型分类与可视化分析工具
  • Linux系统之----程序地址空间
  • 美国“杜鲁门”号航母一战机坠海
  • “上海-日喀则”直飞航线正式通航,将于5月1日开启首航
  • 大家聊中国式现代化|陶希东:打造高水平安全韧性城市,给群众看得见的安全感
  • 上海超万套保租房供应高校毕业生,各项目免押、打折等优惠频出
  • 陈平评《艺术科学的目的与界限》|现代艺术史学的奠基时代
  • 钱学森数据服务中心在沪上线,十万个数字资源向公众开放