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>
相关推荐
Pu_Nine_914 小时前
Vue Router 企业级配置全攻略:打造专业级路由系统
前端·vue.js·typescript·vue-router·路由配置
孟无岐15 小时前
【Laya】LocalStorage 本地存储
typescript·游戏引擎·游戏程序·laya
We་ct19 小时前
LeetCode 42. 接雨水:双指针解法深度剖析与全方法汇总
前端·算法·leetcode·typescript
冲刺逆向1 天前
【js逆向案例五】瑞数通杀模版
前端·javascript·typescript
wuhen_n2 天前
TypeScript的对象类型:interface vs type
前端·javascript·typescript
EndingCoder2 天前
反射和元数据:高级装饰器用法
linux·运维·前端·ubuntu·typescript
We་ct2 天前
LeetCode 135. 分发糖果:双向约束下的最小糖果分配方案
前端·算法·leetcode·typescript
孟无岐3 天前
【Laya】Byte 二进制数据处理
网络·typescript·游戏引擎·游戏程序·laya
孟无岐3 天前
【Laya】ClassUtils 类反射工具
typescript·游戏引擎·游戏程序·laya
We་ct3 天前
LeetCode 380. O(1) 时间插入、删除和获取随机元素 题解
前端·算法·leetcode·typescript