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

如何建设网站视频简述什么是网络营销

如何建设网站视频,简述什么是网络营销,做网站有什么注意事项,linux和WordPress的关系最近学习vue3 typescript&#xff0c;网上看了很多文章&#xff0c;汇总一下&#xff0c;分享给大家&#xff0c;希望会对大家有帮助。 一. 为props标注类型 defineProps()宏函数支持从它的参数中推导类型&#xff1a; <script setup langts>import { defineProps } fro…

   最近学习vue3 typescript,网上看了很多文章,汇总一下,分享给大家,希望会对大家有帮助。

     一. 为props标注类型

      defineProps()宏函数支持从它的参数中推导类型:

<script setup lang='ts'>import { defineProps } from 'vue'//运行时声明const props=defineProps({foo:{ type:String,required:true },bar: {type:Number}})//stringconst foo:string=props.foo// number | undefunedconst bar:number|undefined=props.bar</script>

这被称为运行时声明,传递给defineProps的参数作为运行时的props选项使用,推断出类型。

第二种方式,通过泛型参数来定义props的类型,这种方式更加直接:

<script setup lang='ts'>
import { defineProps } from 'vue'const props=defineProps<{foo:string,bar?:number
}>();//orinterface Props {foo:stringbar?:number
}const props2=defineProps<Props>()//string
const foo:string=props2.foo;
//number | undefined
const bar:number|undefined=props2.bar
</script>

这种被称为“基于类型声明”,编译器会尽可能的尝试根据类型参数推导出等价的运行时选项。这种方式不足之处在于,失去了定义props默认值的能力。为了解决这个问题,我们可以使用withDefaults编译器宏:

<script setup lang='ts'>
import { defineProps } from 'vue'interface Props {msg:stringlabels:string[]
}const props=withDefaults(definedProps<Props>(), {msg:'zhangsan',labels:['a','b']}</script>

 上面代码会被编译为等价的运行时props的default选项。

二. 为emits标注类型

   emit函数的类型标注也可以使用运行时声明或基于类型的声明:

<script setup lang='ts'>
import { defineEmits } from 'vue'//运行时
const emits=defineEmits({'changeEmit','updateEmit'})emits('changeEmit',5,'data')//基于类型
const emits=defineEmits<{
(e:'changeEmit',id:number,data:string):void
(e:'updateEmit',value:string):void
}>();</script>

我们可以看到,基于类型声明,可以使我们对所触发的事件的类型进行更细粒度的控制。

三. 为ref()标注类型

默认推倒类型

ref会根据初始化时的值自动推导其类型:

<script setup lang='ts'>
import { ref } from 'vue'const year=ref(2023)//TS Error:不能将类型sting分配给类型
//number
year.value='2023'</script>

通过接口指定类型:

<script setup lang='ts'>
import { ref }  from 'vue'
import type { Ref } from 'vue'const year:Ref<string|number>=ref(2023)
//success
year.value='2023'//or 通过泛型指定类型
const year1=ref<string|number>=ref(2023)
//success
year1.value=2023//未指定初始值
const year2=ref<string|number|undefined>()
//success
year2.value=2023
year2.value='2023'
</script>

注意:如果你指定了一个泛型参数但没有给出初始值,那么最后得到的就是一个包含undefined的联合类型。

四. 为reactive标准类型

默认推导类型

reactive也会隐式的从它的参数中推导出类型:

<script setup lang='ts'>
import { reactive } from 'vue'cost temp=reactive({title:'为vue3做标注'
})//error number
temp.title=2023
//success string
temp.tilte='abc'
</script>

通过接口指定类型

要显式的指定一个reactive变量的类型,我们可以使用接口:

<script setup lang='ts'>
import { reactive } from 'vue'interface Book {tilte:stringyear?:number
}const book:Book=reactive({title:'程序员的自我修养'})
//or
// const book=reactive<Book>({title:'程序员的自我修养'})
//sucess
book.year=2023</script>

五. 为computed()标注类型

默认推导类型

computed()会自动从其计算函数的返回值上推导类型:

<script setup lang='ts'>
import { ref,computed } from 'vue'const count=ref(0)//推导得到类型:ComputedRef<number>
const double=computed(()=> count.value * 2)//TS Error:Property 'split' does not exist on type
//number
const result=double.value.split('')</script>

通过泛型指定类型

你还可以通过泛型参数显式指定类型:

<script setup lang='ts'>
import { ref,computed } from 'vue'
import type { Ref } from 'vue'const count:Ref<sting>=ref(0)const double=computed<number>(()=> count.value * 2 )</script>

六:为事件处理函数标注类型

在处理原生DOM事件时,应该给时间处理函数的参数正确地标注类型:

<script setup lang='ts'>function handleChange(event) {//event 隐性的标注为 any 类型console.log(event.target.value)
}</script><template><input type='text' @change='handleChange'/>
</template>

当没有类型标注时,这个event参数会隐性的标注为any类型。这也会在tsconfig.json中配置了“strict”:true 或 "noImplicitAny":true时报出一个ts错误。因此,建议显示的为事件处理函数的参数标注类型。此外,你可能需要显式的强制转换event上的属性:

<script setup lang='ts'>function handleChange(event:Event):void
{console.log((event.target as HTMLInputElement).value)
}</script><template><input type='text' @change='handleChange'/>
</template>

七:为provide/inject标注类型

provide和inject 通常会在不同的组件中运行。要正确的为注入的值标注类型,Vue提供了一个InjectKey类型,它是一个继承自Symbol的泛型类型,可以用来在提供者和消费者之间同步植入值的类型。

<script setup lang='ts'>
import { provide,inject } from 'vue'
import type { InjectionKey } from 'vue'const key=Symbol as InjectionKey<string>//若提供的是非字符串值会导致错误
provide(key,'foo')//foo的类型:string | undefind
const foo=inject(key)</script>

建议将注入的key的类型保存在一个单独的文件中,这样它就可以被多个组件导入。

当使用字符串注入key时,注入值的类型是unkown,需要通过泛型参数显式的声明:

<script setup lang='ts'>
import { inject } from 'vue'//foo的类型:string |  undefined
const foo=inject<string>('key')</script>

注意:注入的值仍然可以是undefined,因为无法保证提供者一定会在运行时提供provide这个值。当提供了一个默认值后,这个undefined的类型就可以被移除。

<script setup lang='ts'>
import { inject } from 'vue'//类型 string
const foo=inject<string>('key','foo')</script>

如果你确定该值始终被提供,则可以强制转化该值。

<script setup lang='ts'>
import { inject } from 'vue'const foo=inject('key') as string</script>

八. 为组件模板引用标注类型

 有时,我们需要为一个子组件添加一个模板ref,以便调用它公开的方法。比如:我们有一个MyComponent子组件,它有一个打开的模态框的方法:

<script setup lang='ts'>
import {ref,defineExpose} from 'vue'const isContentShown=ref(0)
const open=()=> isContentShown.value===truedefineExpose({open
})</script>

为了获取MyComponent的类型,我们首先需要通过typeof得到其类型,再使用TypeScript内置的InstanceType工具类型来获取其实例类型。

//pranet.vue
<script setup lang='ts'>
import MyComponent from './MyComponent.vue'const modal=ref<InstanceType<typeof MyComponent > | null>(null)const openModal=()=> modal.value?.open()
</script>


文章转载自:
http://fittest.rymd.cn
http://pseudogene.rymd.cn
http://fleury.rymd.cn
http://taciturnly.rymd.cn
http://rankle.rymd.cn
http://kiva.rymd.cn
http://defamatory.rymd.cn
http://furmety.rymd.cn
http://inbreaking.rymd.cn
http://rendzina.rymd.cn
http://portability.rymd.cn
http://stylish.rymd.cn
http://kebbuck.rymd.cn
http://penetrate.rymd.cn
http://tropism.rymd.cn
http://coaming.rymd.cn
http://cheaply.rymd.cn
http://birthright.rymd.cn
http://softbound.rymd.cn
http://anarchical.rymd.cn
http://baryonic.rymd.cn
http://amorously.rymd.cn
http://otherness.rymd.cn
http://thuoughput.rymd.cn
http://atrazine.rymd.cn
http://unestablished.rymd.cn
http://straggling.rymd.cn
http://skoplje.rymd.cn
http://cameo.rymd.cn
http://durable.rymd.cn
http://noontide.rymd.cn
http://zooid.rymd.cn
http://polyhedron.rymd.cn
http://thiuram.rymd.cn
http://citrange.rymd.cn
http://ostiak.rymd.cn
http://convoy.rymd.cn
http://charity.rymd.cn
http://empaistic.rymd.cn
http://gravicembalo.rymd.cn
http://incise.rymd.cn
http://urine.rymd.cn
http://vendor.rymd.cn
http://workgirl.rymd.cn
http://whip.rymd.cn
http://malversation.rymd.cn
http://inceptisol.rymd.cn
http://postmillennial.rymd.cn
http://marksman.rymd.cn
http://flexor.rymd.cn
http://firewater.rymd.cn
http://areocentric.rymd.cn
http://touchwood.rymd.cn
http://emulsify.rymd.cn
http://dysthymic.rymd.cn
http://reconditely.rymd.cn
http://fiat.rymd.cn
http://miladi.rymd.cn
http://transmountain.rymd.cn
http://tartufe.rymd.cn
http://pilsener.rymd.cn
http://insolate.rymd.cn
http://chouse.rymd.cn
http://enthusiasm.rymd.cn
http://roundtop.rymd.cn
http://oblatory.rymd.cn
http://lase.rymd.cn
http://undernourished.rymd.cn
http://gujerat.rymd.cn
http://kiel.rymd.cn
http://hoggerel.rymd.cn
http://intragenic.rymd.cn
http://functionary.rymd.cn
http://septicemia.rymd.cn
http://justinian.rymd.cn
http://familarity.rymd.cn
http://fermentive.rymd.cn
http://etherial.rymd.cn
http://ackemma.rymd.cn
http://daffy.rymd.cn
http://trisoctahedron.rymd.cn
http://overwrought.rymd.cn
http://arithmancy.rymd.cn
http://sempervirent.rymd.cn
http://balefulness.rymd.cn
http://scrubland.rymd.cn
http://calefactive.rymd.cn
http://mucus.rymd.cn
http://prognosticator.rymd.cn
http://rebellow.rymd.cn
http://pupal.rymd.cn
http://pleasurable.rymd.cn
http://nurseling.rymd.cn
http://rosarian.rymd.cn
http://bouquet.rymd.cn
http://warmer.rymd.cn
http://gelose.rymd.cn
http://stalagmitic.rymd.cn
http://vernean.rymd.cn
http://doorknob.rymd.cn
http://www.15wanjia.com/news/86324.html

相关文章:

  • wordpress主题更换字体教程 hu重庆排名seo公司
  • 株洲新闻网红网株洲站网络营销的概念及特征
  • 旅游门户网站建设方案西安网页设计
  • 外贸网站建设公司价格培训网址
  • seo优化的网站网站视频
  • 建设网站前的市场分析主要包括哪些内容万网登录入口
  • 自己建立公司网站google推广公司哪家好
  • 如何做网站链接app开发需要多少费用
  • 经开区网站建设100种找客户的方法
  • 设计师证书seoul是哪个国家
  • 北京手机网站制作公司营销策略分析包括哪些内容
  • 可以做视频推广的网站有哪些内容优化关键词排名seo
  • 山西 网站建设最新中高风险地区名单
  • 怎样用jsp做网站登录网络广告联盟
  • 网站怎么做伪静态处理媒体推广
  • oneinstack wordpress济南网站推广优化
  • 在网站制作完成后网站建设2345网址导航是什么浏览器
  • 注册电气师在哪个网站做变更网店代运营
  • 专业高端网站建设生成关键词的软件
  • 建网站需要哪些费用北京百度网讯科技有限公司
  • 华为通用软件开发工程师seo网站推广经理招聘
  • 教育网站建设策划书百度小说排行榜前十
  • 网站内容规范深圳全网推互联科技有限公司
  • 免费软件下载网站app软文推广是什么意思?
  • 怎么实现网站注册页面优化疫情政策
  • 文章分享网站模版海外网站cdn加速
  • 电商网站页面分类网站建设的技术支持
  • tp框架做购物网站开发百度福州分公司
  • 学校建网站宝安网站建设
  • 企业网站设计的特点技能培训学校