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

WHAT - Typescript 定义元素类型

文章目录

  • 1. 原生 JavaScript 中(TypeScript)
    • 示例
    • 常见类型对应表
  • 2. 在 React 中(使用 React.RefObject 和事件中访问)
    • A. 使用 useRef 获取元素类型
    • B. 在事件处理函数中
    • C. 其他事件类型示例
  • 3. 在 Vue 中(Vue 3 + TypeScript)
    • A. 使用模板 ref 和 onMounted
    • B. 在事件中使用
  • 小结对比

在 TypeScript 中,为 DOM 元素定义类型是一个常见需求,不同场景(原生 JavaScript、React、Vue)下写法略有不同,下面为你详细列出:

1. 原生 JavaScript 中(TypeScript)

在 TypeScript 中操作原生 DOM 元素,常用类型来自 lib.dom.d.ts 中定义的类型,例如 HTMLInputElement, HTMLDivElement, HTMLElement 等。

示例

const input = document.querySelector('input') as HTMLInputElement;
input.value = 'Hello';

或更安全写法(避免 null):

const input = document.querySelector('input');
if (input instanceof HTMLInputElement) {
  input.value = 'Hello';
}

常见类型对应表

元素类型
<input>HTMLInputElement
<textarea>HTMLTextAreaElement
<select>HTMLSelectElement
<div>HTMLDivElement
<button>HTMLButtonElement
所有元素HTMLElement

2. 在 React 中(使用 React.RefObject 和事件中访问)

A. 使用 useRef 获取元素类型

import React, { useRef, useEffect } from 'react';

const MyComponent: React.FC = () => {
  const inputRef = useRef<HTMLInputElement>(null);

  useEffect(() => {
    if (inputRef.current) {
      inputRef.current.focus();
    }
  }, []);

  return <input ref={inputRef} />;
};

B. 在事件处理函数中

const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
  console.log(e.target.value);
};

C. 其他事件类型示例

事件类型类型名
onChange on inputReact.ChangeEvent<HTMLInputElement>
onClickReact.MouseEvent<HTMLElement>
onSubmit on formReact.FormEvent<HTMLFormElement>
onKeyDown on textareaReact.KeyboardEvent<HTMLTextAreaElement>

3. 在 Vue 中(Vue 3 + TypeScript)

A. 使用模板 ref 和 onMounted

<template>
  <input ref="inputEl" />
</template>

<script lang="ts" setup>
import { ref, onMounted } from 'vue';

const inputEl = ref<HTMLInputElement | null>(null);

onMounted(() => {
  if (inputEl.value) {
    inputEl.value.focus();
  }
});
</script>

B. 在事件中使用

<template>
  <input @input="handleInput" />
</template>

<script lang="ts" setup>
const handleInput = (e: Event) => {
  const target = e.target as HTMLInputElement;
  console.log(target.value);
};
</script>

小结对比

框架 / 场景写法方式类型示例
原生 JS + TSas HTMLInputElement / instanceofHTMLDivElement, HTMLInputElement
ReactuseRef<HTMLInputElement>()React.ChangeEvent<HTMLInputElement>
Vue`ref<HTMLInputElementnull>()`

相关文章:

  • 大数据(7.2)Kafka万亿级数据洪流下的架构优化实战:从参数调优到集群治理
  • 数据结构与算法之ACM Fellow-算法3.4 散列表
  • Unity 设置弹窗Tips位置
  • LLaMA-Factory从安装到微调全流程
  • Linux上搭建NFS共享存储
  • SpringBoot项目集成Seata 2.0.0
  • Kubernetes核心架构:从组件协同到工作原理
  • LED恒流驱动驱动电路原理图 LM3406HV-Q1
  • SpringBoot 为何启动慢
  • 第1课:MCP服务协议核心架构解析
  • Cursor中rules配置参考-202504版(含前后端Golang/TypeScript/Kotlin等)
  • Android 自己的智能指针
  • leetcode:905. 按奇偶排序数组(python3解法)
  • 解读json.loads函数参数
  • 【免费公测】可遇AI直播/无人直播/矩阵直播/AI场控
  • 微信小程序跳6
  • CondaError: Run ‘conda init‘ before ‘conda activate‘
  • 大数据(7.1)Kafka实时数据采集与分发的企业级实践:从架构设计到性能调优
  • 蓝桥杯基础数论入门
  • freecad 窗口控件层级关系
  • 雨颜色网站建设/国内做seo最好公司
  • 网站宣传推广的目的/齐三seo顾问
  • 网页设计研究生专业/站长之家seo概况查询
  • 阳江本地网络平台/百度sem优化师
  • 手机做网站软件/微信怎么推广自己的产品
  • 安多网站制作/白帽优化关键词排名seo