vue3中使用typescript小结

ref

typescript 复制代码
const msg = ref<string>('')
const nme = ref<string | null>(null)
const isDone = ref<boolean>(false)
// 普通的button
const button = ref<HTMLButtonElement | null>(document.querySelector('button'))
// const button: HTMLButtonElement | null = document.querySelector('button')
// tableBody
const tableBody: HTMLTableElement | null = document.querySelector('#table-body')

const list = ref<Array<string>>(['apple', 'pear'])
const statusOptions = ref<Array<Object>>([
  {
    label: '启用',
    value: '0'
  },
  {
    label: '停用',
    value: '1'
  }
])

接口interface

typescript 复制代码
interface DogType {
    id: string
    url: string
    height: number
    width: number
    test?: boolean
}

class Dog implements DogType {
    id: string
    url: string
    height: number
    width: number

    constructor(id: string, url: string, height: number, width: number) {
        this.id = id
        this.url = url
        this.height = height
        this.width = width
    }
}

类 class

typescript 复制代码
class ShowImage {
    public static addData(data: DogType): void {
        const dog: Dog = new Dog(data.id, data.url, data.height, data.width)
        const tableRow: HTMLTableRowElement = document.createElement('tr')
        tableRow.innerHTML = `
            <td>${cat.id}</td>
            <td><img src="${cat.url}" /></td>
            <td>${cat.height.toString()}</td>
            <td>${cat.width.toString()}</td>
            <td>${cat.url}</td>
            <td><a href="#">X</a></td>
        `
        tableBody?.appendChild(tableRow)
    }
    public static deleteData(deleteButton: HTMLAnchorElement): void {
        const td = deleteButton.parentElement as HTMLTableCellElement
        const tr = td.parentElement as HTMLTableRowElement
        tr.remove();
    }
}

promise

typescript 复制代码
async function getJSON<T>(url: string): Promise<T> {
    const response: Response = await fetch(url)
    const data: Promise<T> = await response.json()
    return data
}

async function getData(): Promise<void> {
    try {
        const dataJson: CatType[] = await getJSON<CatType[]>(url)
        const dataJson: CatType = json[0]
        ShowImage.addData(data)
    }
    catch (error: Error | unknown) {
        let message = ref<string>()
        if (error instanceof Error) {
            message = error.message
        } else {
            message = String(error)
        }
        console.log(error)
    }
}

button?.addEventListener<'click'>('click', getData);

tableBody?.addEventListener<'click'>('click', (e: MouseEvent) => {
    ShowImage.deleteData(<HTMLAnchorElement>e.target);
});

reactive

typescript 复制代码
interface Info {
	name: string
	age: number
	address: string
	sex: string
	phone?: string
}

const infoRef = reactive<Info>({
	name: 'hello',
	age: 20,
	address: 'Beijing',
	sex: '男',
	phone: '123'
})

组件实例

typescript 复制代码
import Dialog from '@/components/Dialog/index.vue'
// typescript内置的 InstanceType + typeof
// 定义组件的实例
const dialogRef = ref<InstanceType<typeof Dialog | null>>(null)

defineProps

typescript 复制代码
interface Props {
	name: string
	age: number
	phone?: string
}

defineProps<Props>()
typescript 复制代码
interface Emits {
  handleValChange: (val: string) => ()
  handleValUpdate: (val: string) => ()
}
const emits = defineEmits<Emits>()

ref 获取dom节点

typescript 复制代码
// 初始节点可能是 null,所以要补全 null 类型
const ele  = ref<HTMLDivElement | null>(null)
<div ref="ele"></div>
相关推荐
剑神一笑42 分钟前
从字符串到时间线:实现一个 Cron 表达式解析器
javascript·typescript·reactjs
We་ct5 小时前
LeetCode 63. 不同路径 II:动态规划解题详解
前端·算法·leetcode·typescript·动态规划
布局呆星5 小时前
Vue3+TS封装Axios请求全攻略
前端·javascript·ajax·typescript
军军君0120 小时前
数字孪生监控大屏实战模板:智能业务大数据监管平台
css·vue.js·elementui·typescript·前端框架·echarts·less
zhensherlock21 小时前
Protocol Launcher 系列:Tally 快速计数器的深度集成
前端·javascript·typescript·node.js·自动化·github·js
深海鱼在掘金1 天前
Next.js从入门到实战保姆级教程(第十四章):性能优化深度实践
前端·typescript·next.js
深海鱼在掘金1 天前
Next.js从入门到实战保姆级教程(第十三章):从原理到实践深度剖析缓存策略
前端·typescript·next.js
谷子熟了1 天前
电商智能客服系统本地搭建
经验分享·docker·typescript·ai编程·llama
zhensherlock1 天前
Protocol Launcher 系列:Working Copy 文件操作与高级命令详解
javascript·git·typescript·node.js·自动化·github·js
深海鱼在掘金2 天前
Next.js从入门到实战保姆级教程(第十一章):错误处理与加载状态
前端·typescript·next.js