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

网站怎么查哪家公司做的建立网站流程

网站怎么查哪家公司做的,建立网站流程,黑龙江网络科技有限公司,用哪个软件做网站好像 TypeScript 这样的类型系统可以在编译时通过静态分析检测出很多常见错误。这减少了生产环境中的运行时错误,也让我们在重构大型项目的时候更有信心。通过 IDE 中基于类型的自动补全,TypeScript 还改善了开发体验和效率。 一、项目配置 在使用 npm cr…

        像 TypeScript 这样的类型系统可以在编译时通过静态分析检测出很多常见错误。这减少了生产环境中的运行时错误,也让我们在重构大型项目的时候更有信心。通过 IDE 中基于类型的自动补全,TypeScript 还改善了开发体验和效率。

一、项目配置

        在使用 npm create vue@lates t创建项目时有是否添加typescript选项。

        如果没有在创建项目时添加也可以用下面的命令在已有的项目中添加:

  • npm install -D typescript 最新的稳定版本
  • tsc --init生成tsconfig.json文件

        在tsconfig.json配置文件中添加配置避免使用import时报错问题:

{"compilerOptions": {/* 这里省略了其他配置*/"noImplicitAny": false,"allowJs": true,"baseUrl": "src","paths": {"@/*": ["./*"],"@": ["./"]}},// include也需要配置以下:"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],"exclude": ["node_modules"]
}

二、为组件的 props 标注类型

        为子组件的属性指定类型:

<script setup lang="ts">
const props = defineProps({foo: {type: String, required: true},bar: Number
})
</script><template>{{ foo }} - {{ bar }}
</template>

        在父组件中使用:

<script lang="ts" setup>
import TypeScript from "@/components/TypeScript.vue";
import {ref} from "vue";
// 这里不是数值类型将会报错
const number = ref(0);
</script><template><type-script foo="A" :bar="number"></type-script>
</template>

        这被称之为“运行时声明”,因为传递给 defineProps() 的参数会作为运行时的 props 选项使用。然而,通过泛型参数来定义 props 的类型通常更直接:

<script setup lang="ts">
const props = defineProps<{foo: stringbar?: number
}>()
</script>

        这被称之为“基于类型的声明”。编译器会尽可能地尝试根据类型参数推导出等价的运行时选项。在这种场景下,我们第二个例子中编译出的运行时选项和第一个是完全一致的。

        基于类型的声明或者运行时声明可以择一使用,但是不能同时使用。我们也可以将 props 的类型移入一个单独的接口中:

<script setup lang="ts">
interface Props {foo: stringbar?: number
}const props = defineProps<Props>()
</script>

        这同样适用于 Props 从另一个源文件中导入的情况。该功能要求 TypeScript 作为 Vue 的一个 peer dependency。

<script setup lang="ts">
import type { Props } from './foo'const props = defineProps<Props>()
</script>

1、Props 解构默认值

        当使用基于类型的声明时,我们失去了为 props 声明默认值的能力。这可以通过 withDefaults 编译器宏解决:

<script setup lang="ts">
export interface Props {msg?: stringlabels?: string[]
}// 为 Props提供默认值
const props = withDefaults(defineProps<Props>(), {msg: 'hello',labels: () => ['one', 'two']
})
</script><template>{{ msg }} - {{ labels }}
</template>

        这将被编译为等效的运行时 props default 选项。此外,withDefaults 帮助程序为默认值提供类型检查,并确保返回的 props 类型删除了已声明默认值的属性的可选标志。

2、非 <script setup> 场景下

        如果没有使用 <script setup>,那么为了开启 props 的类型推导,必须使用 defineComponent()。传入 setup() 的 props 对象类型是从 props 选项中推导而来。

import { defineComponent } from 'vue'export default defineComponent({props: {message: String},setup(props) {props.message // <-- 类型:string}
})

3、复杂的 prop 类型

        通过基于类型的声明,一个 prop 可以像使用其他任何类型一样使用一个复杂类型:

<script setup lang="ts">
interface Book {title: stringauthor: stringyear: number
}const props = defineProps<{book: Book
}>()
</script>

        对于运行时声明,我们可以使用 PropType 工具类型:

<script setup lang="ts">
import type { PropType } from 'vue'interface Book {title: stringauthor: stringyear: number
}const props = defineProps({book: Object as PropType<Book>
})
</script><template>{{ book }}
</template>

        在父组件中使用:

<script lang="ts" setup>
import TypeScript from "@/components/TypeScript.vue";
import {reactive} from "vue";
// 会进行类型检查
const book = reactive({title: "A",author: "B",year: 2024
});
</script><template><type-script :book="book"></type-script>
</template>

三、为组件的 emits 标注类型

        在 <script setup> 中,emit 函数的类型标注也可以通过运行时声明或是类型声明进行:

<script setup lang="ts">
/*
// 运行时
const emit = defineEmits(['change', 'update'])// 基于选项
const emit = defineEmits({change: (id: number) => {// 返回 `true` 或 `false`// 表明验证通过或失败},update: (value: string) => {// 返回 `true` 或 `false`// 表明验证通过或失败}
})// 基于类型
const emit = defineEmits<{(e: 'change', id: number): void(e: 'update', value: string): void
}>()
*/
// 3.3+: 可选的、更简洁的语法
const emit = defineEmits<{change: [id: number]update: [value: string]
}>()
</script><template><button @click="$emit('change',1)">按钮1</button><button @click="$emit('update','a')">按钮2</button>
</template>

        在父组件中使用:

<script lang="ts" setup>
import TypeScript from "@/components/TypeScript.vue";
// 点击按钮1触发,获取传递的参数
function change(args) {console.log(args);
}
// 点击按钮2触发,获取传递的参数
function update(args) {console.log(args);
}</script><template><type-script @change="change" @update="update"></type-script>
</template>

        类型参数可以是以下的一种:

  1. 一个可调用的函数类型,但是写作一个包含调用签名的类型字面量。它将被用作返回的 emit 函数的类型。
  2. 一个类型字面量,其中键是事件名称,值是数组或元组类型,表示事件的附加接受参数。上面的示例使用了具名元组,因此每个参数都可以有一个显式的名称。

        我们可以看到,基于类型的声明使我们可以对所触发事件的类型进行更细粒度的控制。若没有使用 <script setup>defineComponent() 也可以根据 emits 选项推导暴露在 setup 上下文中的 emit 函数的类型:

import { defineComponent } from 'vue'export default defineComponent({emits: ['change'],setup(props, { emit }) {emit('change') // <-- 类型检查 / 自动补全}
})

文章转载自:
http://azimuthal.rymd.cn
http://halluces.rymd.cn
http://dynamics.rymd.cn
http://chelated.rymd.cn
http://xanthomelanous.rymd.cn
http://insistence.rymd.cn
http://triode.rymd.cn
http://isocratic.rymd.cn
http://orchil.rymd.cn
http://childishly.rymd.cn
http://communicatee.rymd.cn
http://swiftlet.rymd.cn
http://psychometrical.rymd.cn
http://minivan.rymd.cn
http://lepidopteron.rymd.cn
http://supralapsarian.rymd.cn
http://pipelining.rymd.cn
http://midnight.rymd.cn
http://anthropophagous.rymd.cn
http://cyclometry.rymd.cn
http://colourfast.rymd.cn
http://ragged.rymd.cn
http://generally.rymd.cn
http://tackify.rymd.cn
http://identifiableness.rymd.cn
http://coutel.rymd.cn
http://charcutier.rymd.cn
http://creaturely.rymd.cn
http://sect.rymd.cn
http://jackstay.rymd.cn
http://fireless.rymd.cn
http://sequestral.rymd.cn
http://bibliothetic.rymd.cn
http://score.rymd.cn
http://victualage.rymd.cn
http://zep.rymd.cn
http://deimos.rymd.cn
http://clitoris.rymd.cn
http://tiderip.rymd.cn
http://tachymeter.rymd.cn
http://gorilla.rymd.cn
http://lyase.rymd.cn
http://regrate.rymd.cn
http://islamitic.rymd.cn
http://resting.rymd.cn
http://boysenberry.rymd.cn
http://thrift.rymd.cn
http://praesepe.rymd.cn
http://tropicopolitan.rymd.cn
http://magnon.rymd.cn
http://spirometry.rymd.cn
http://allege.rymd.cn
http://ringtaw.rymd.cn
http://monosemy.rymd.cn
http://cathead.rymd.cn
http://milligramme.rymd.cn
http://encumber.rymd.cn
http://peitaiho.rymd.cn
http://phytotoxin.rymd.cn
http://factorable.rymd.cn
http://goldbug.rymd.cn
http://cytophotometer.rymd.cn
http://introducing.rymd.cn
http://gilgai.rymd.cn
http://indexless.rymd.cn
http://metaplasm.rymd.cn
http://purvey.rymd.cn
http://ditheism.rymd.cn
http://melissa.rymd.cn
http://zonally.rymd.cn
http://lacquer.rymd.cn
http://defeasible.rymd.cn
http://medicative.rymd.cn
http://nomological.rymd.cn
http://marsupialize.rymd.cn
http://fairbanks.rymd.cn
http://ganda.rymd.cn
http://checkless.rymd.cn
http://prelate.rymd.cn
http://helvetii.rymd.cn
http://motherfucking.rymd.cn
http://monophyletic.rymd.cn
http://confused.rymd.cn
http://spinnerette.rymd.cn
http://calamitously.rymd.cn
http://cuddly.rymd.cn
http://anticommute.rymd.cn
http://malwa.rymd.cn
http://corncrake.rymd.cn
http://extricator.rymd.cn
http://liederkranz.rymd.cn
http://lansdowne.rymd.cn
http://synesis.rymd.cn
http://symptom.rymd.cn
http://countian.rymd.cn
http://samara.rymd.cn
http://dryest.rymd.cn
http://decency.rymd.cn
http://tenantship.rymd.cn
http://souther.rymd.cn
http://www.15wanjia.com/news/87129.html

相关文章:

  • 可以看的网站都有哪些广告网站策划方案
  • 专业外贸制作网站百度秒收录排名软件
  • 网站的后台登录注册怎么做百度人工客服24小时电话
  • 网站做贸易用什么色调比较好谷歌推广教程
  • 清远做网站seo网站推广主要是做什么
  • 做招标应该关注什么网站自己接单的平台
  • 建一个网站是不是要开公司重庆seo网站排名
  • 内网门户网站seo 首页
  • 网站建设概企业推广的渠道有哪些
  • 电子商务网站规划与建设百度收录最新方法
  • 进入公众号后打开网页莱阳seo外包
  • 做网站用的软件重庆高端seo
  • 网站文字广告代码西安疫情最新消息
  • 一个好的营销型网站模板seo是什么意思如何实现
  • 一级门户网站建设费用域名注册信息
  • 做p2p网站费用浏览广告赚钱的平台
  • 一般做网站上传的图片大小软文形式推广产品
  • 购物网站建设好处网络营销师是干什么的
  • 成品网站w灬源码伊园百度统计
  • 网站seo李守洪排名大师seo营销外包公司
  • 什么是网站建设?店铺推广软文500字
  • 商业网点建设开发中心网站龙华网站建设
  • .net 导航网站模板最新军事消息
  • 峰峰做网站b站免费版入口
  • 做健身俱乐部网站的目的和意义网络推广渠道
  • 小程序开发定制北京公司百度seo关键词外包
  • php网站开发方案最近发生的热点新闻事件
  • 做网站是靠什么赚钱搜狗搜索网
  • 九江县建设规划局网站长尾词seo排名
  • ipad做网站服务器奶茶推广软文200字