关于实际开发中类型定义

来源:2-7 常用的 24 种 TS 数据类型

咩仔

2023-10-07

老师好,在vue实际开发中,我可能会偷懒只给变量基本类型定义,遇到了object、array、function可能就不会进行特别详细的类型定义。

那我们既然要用typescript开发,是不是应该对所有类型,能定义则必须完全定义?否则就会出现有的定义有的不定义这种问题。

比如在vue3.2中,声明一个emit,我可能会这样

const emit = defineEmits(['update:modelValue'])

这种写法我是不是应该避免,尽可能的写成下面这样

const emit = defineEmits<{
    (e: 'update:modelValue', targetValue: string): void
}>()

还比如老师您后面函数那章节的例子,Vue3实际开发中是否也推荐每个函数也要完全写好定义呢

let info: (name: string, age: number) => number =
  function (name: string, age: number) :number {
    console.log("name:", name, " age:", age);
    return 3
}

或者

type TypInfoFun = (name: string, age: number) => number
let info: TypInfoFun =
  function (name: string, age: number) :number {
    console.log("name:", name, " age:", age);
    return 3
}

这种类似的问题困扰我很久,希望老师详细说说,谢谢!

写回答

1回答

keviny79

2023-10-07

(1)  你说的 "是不是应该对所有类型,能定义则必须完全定义" 是正确的,这也是 ts  该具备的能力。

(2)const emit = defineEmits(['update:modelValue']),const emit = defineEmits<{    (e: 'update:modelValue', targetValue: string): void }>() 两个写法都可以, 前者是新写法,你可以看到emit 时有提示。

(3)下面增加 (name: string, age: number) => number  和不加都能有自动提示,问题不在于有没有提示,而是一但你加了 (name: string, age: number) => number,就对   function (name: string, age: number) :number 的类型固化了,而不加可以任意修改。

let info: (name: string, age: number) => number =  function (name: string, age: number) :number {    console.log("name:", name, " age:", age);    return 3 }


一般加上 (name: string, age: number) => number  更好,起到约束函数类型。

0
0

TypeScript 从入门到深度掌握,晋级TS高手

200+技术点,22 场景应用,Vue3 源码 TS 用法剖析

430 学习 · 53 问题

查看课程