ts基础总结

ts有什么用

类型检查, 拥抱es6,支持部分的esNext草案,直接编译到原生js、引入新的语法糖

为什么用ts

TypeScript的设计目的应该是解决JavaScript的“痛点”:弱类型和没有命名空间,导致很难模块化,不适合开发大型程序。另外它还提供了一些语法糖来帮助大家更方便地实践面向对象的编程。

typescript不仅可以约束我们的编码习惯,还能起到注释的作用,当我们看到一函数后我们立马就能知道这个函数的用法,需要传什么值,返回值是什么类型一目了然,对大型项目的维护性有很大的提升。

编译报错, 会生成编译结果么?

答案是肯定的,当然可以在tsconfig.json的配置, noEmitONError

tsconfig.json的文件配置

还没搞定

基础总结

数据类型
  • boolean 、number、string、null、 undefined、 Symbol
  • undefined 和null 类型的数据只能被赋值undefined 和null, 但是这个类型是所有类型的子类型
  • void 空类型
    // undefined和null是所有类型子类型,都可以赋值let num: Symbol = undefined;sslet num: number = undefined;// undefined类型, 只能给undefinedlet u: undefined = undefined; let n: null = null;
复制代码
  • any和类型推断
   // 在ts中,变量在声明的时候,如果没有定义其类型,会被识成默认类型 let str;str = 'I am strgting';str = 1024;// 未定义类型,直接赋值let num= 124; // 等同于 let num:number = 124, 在后面代码如果赋予num一个string会被报错复制代码
多个可能属性
    //只能访问可能属性的共有属性function getLength(param: string| number) {return param.length;}// 会报错, 因为 length不是 sting和number类型的共有属性// 技巧--》 使用类型别名type possibleType = string | number;function getLength(param: possibleType) {return param.length;}
复制代码
接口的概念
  • 在ts中,interface包括对行为的抽象,由类去实现(implements)
  • 也包括对对象轮廓的描述
对象interface -》动态属性

必选参数和可选参数的类型是动态属性类型的子集,所有在动态属性类型设置的时候要设置上所有类型

     interface userinfo {"memberId": number,"uName": string,"employeeId": string,"datetime": string,"platformList"?: Array<platform>,[propName: string]: string | number | Array<platform> | undefined}
复制代码
只读属性的约束力

注意点: 只读属性的约束力在于第一次给对象赋值的时候,而不是给属性赋值的时候 readonly和 const的区别: const是变量, readonly是属性

接口-》抽象方法的实现
    export interface ISRequest {fetch(url: string, arg?: Object, callback?: Function): Promise<Object>;}export class SafeRequest implements ISRequest {public async fetch(url: string, arg, callback?: Function): Promise<Object> {return new Promise((resolve, reject) => {})}
复制代码
用接口表示数组
    interface NumberArray {[index: any]: number}let numArr: NumberArray = [1, 2, 3]
复制代码
函数的类型
  • 可选参数, 必须在必选参数后面
  • 参数默认值
    function buildName(firstName: string, lastName?: string) {}
复制代码
  • 添加默认值的参数识别为可选参数
  • 剩余参数
类型断言
   // <类型>值//  值 as 类型
复制代码
疑惑--》 声明文件

当使用第三方库时,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。

声明文件在哪里?
  • 与npm包绑定在一起
  • npm包的维护者并没有提供声明文件, 只能由其他人将声明文件发布到@types里面
  • 自己写个声明文件
npm包的声明文件 和全局变量的声明文件

在 npm 包的声明文件中,使用 declare 不再会声明一个全局变量,而只会在当前文件中声明一个局部变量。只有在声明文件中使用 export 导出,然后在使用方 import 导入后,才会应用到这些类型声明。 ######declare global 使用 declare global 可以在 npm 包或者 UMD 库中扩展全局变量的类型

内置对象

内置对象查询--》点击
ESMAScript提供了Boolean、Error、Date、RegExp

    interface obj = {param: Functionparam: Promise}
复制代码
枚举--》 数据的双向映射
    enum companyList= {1: 'aaa', 2: 'bbb'}var companyList = {1: 'aaa',2: 'bbb',aaa: 1,bbb: 2}
复制代码
Vue in Typescript
三大利器
  • vue-component-class
    • 方法可以直接声明为类成员方法。
    • 可以将计算属性声明为类属性访问器。
    • 默认data被当作类属性
    • data , render 和vue的生命周期的钩子直接是类成员的方法,保留这些命名,不要冲突
    • 对于其他的配置项,例如prop、componets等传递给装饰器函数
    import Vue from 'vue';import Component from 'vue-componet-class';Component.resgisterHooks(['beforeRouteEnter'])@Componnet({props: {},components: {}})export default class App extends Vue {// aa = '';// 类型推断aa是个string, 后面aa只能赋值aa类型// 所以最好使用先声明后//  datapublic tableModelItems: Array<any>;constructor() {super();this.tableModelItems = [];}// computedpublic get filterTableData() {return this.tableData.filter((i: any) => i.refundStatus === 0).length// 方法// 声明周期// 此时需要路由函数的生命周期钩子咋办beforeRouteEnterf() {next() // 一定要写,否则玩不下去,为什么?}}}
复制代码

- vue-property-decorator(依赖vue-component-class提供了更多了装饰器,代码更加显示 )- @Emit- @Inject- @Prop- @Provide- @Watch
- vuex-class(连接了vue和vuex)```js复制代码

还没搞定的bug

错误--》 类型报错

添加script的类型

    <script lang="ts"></script><!--否则下面的类型报错-->
复制代码
错误之--》Vue中挂载propoty出错(如果还是爆红,重启ide)

声明再挂载

<!--inject-->import _Vue from 'vue'import moment from "moment";export default {install(Vue: typeof _Vue, options: any) {Vue.prototype.$moment = moment;Vue.prototype.$log = () => {console.log(new Date())}}}
<!--types-->import Vue from 'vue'declare module 'vue/types/vue' {interface Vue {$moment: Function$log: Function}}
复制代码
ts中不能识别.vue文件

TypeScript 默认只识别 .ts 文件,不识别 .vue 文件, 乖乖的写 import Component from 'components/component.vue'

vuex-class的Emit传参数给父组件报错
    @emit("reset")reset(role, this.formData){}<!--此时报错-->复制代码

错误--> 可选参数爆红

参考链接

  • vue+ts快速上手

  • ts通俗易懂,比较清晰的文档

  • ts的官网

  • 尤大大对于ts+vue的看法

  • 蚂蚁金服的ts实践

转载于:https://juejin.im/post/5cbdeec85188250aa922d52b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS7启用SELinux和Firewall修改ssh端口号

基本信息 CentOS :CentOS Linux release 7.6.1810 (Core)SELinux:enforcedFirewall:enforcing生成ssh密钥对 生成密钥对 ssh-keygen -t rsa -b 2048 #默认存放的位置是/home/user/.ssh&#xff0c;使用的是公钥id_rsa.pub从服务器中将私钥复制到本机或者使用本地生成的密钥对&a…

华为智能手环智能手表软件测试,一块智能手表的测试之旅,揭秘华为运动健康科学实验室...

随着消费者对健康生活的日益关注&#xff0c;随之而来的是智能可穿戴设备的蓬勃发展。一个手环&#xff0c;一个智能手表&#xff0c;都可以为消费者提供诸如心率&#xff0c;步数相关的数据统计。而更进阶的设备&#xff0c;则能为用户提供系统的运动解决方案以及监控人体健康…

Flutter 使用动画播放一组图片

请支持原文&#xff1a;tryenough.com/images-anim… 效果如下图&#xff1a; 代码 import package:flutter/material.dart; import package:sprintf/sprintf.dart; //这个是一个拼接字符串的flutter库&#xff0c;主要是为了使用方便&#xff0c;你可以选择不使用&#xff0c…

软件测试都有哪些证书,软件测试都有哪些证书呀?有用吗?

OYWP学习论坛 www.oywp.netOYWP学习论坛 www.oywp.netOYWP学习论坛 www.oywp.netOYWP学习论坛 www.oywp.netOYWP学习论坛 www.oywp.netOYWP学习论坛 www.oywp.netOYWP学习论坛 www.oywp.netOYWP学习论坛 www.oywp.netOYWP学习论坛 www.oywp.netOYWP学习论坛 www.oywp.netOYWP学…

超低频测试信号产生电路软件流程图,一种0_20Hz超低频信号发生器的设计与实现...

。。第22卷第4期增刊           仪 器 仪 表 学 报             2001年8月一种0&#xff5e;20Hz超低频信号发生器的设计与实现马彦恒 郭 利 于久恩 (军械工程学院 石家庄 050003)摘要 本文介绍了一种采用了主—从式双CPU结构,频率和幅度都…

datastage 使用小结

转载于:https://www.cnblogs.com/Guhan-xue/p/10758663.html

Teams 的逻辑架构与语音解决方案 - Official Posters Download

意外收获了前几天&#xff08;0420&#xff09;刚刚更新出来的Teams架构海报&#xff0c;分享给大家下载 Microsoft Teams IT architecture and telephony solutions postershttps://docs.microsoft.com/en-us/microsoftteams/teams-architecture-solutions-posters 接下来跟大…

ug不能自动启动服务器,没有足够的权限启动系统服务解决方法

没有足够的权限启动系统服务解决方法UG的安装要注意两个问题&#xff0c;一个是安装路径不能有中文(包括ug文件存储路径也不能含有中文),二是许可证的安装&#xff0c;win7装ug问题多数出在“许可证”的安装过程&#xff0c;你的那个报警是&#xff1a;就是说你把UGII_TMP_DIR设…

css直接子元素怎么用,CSS 子元素选择器使用实例

与后代选择器相比&#xff0c;子元素选择器只能选择作为某元素子元素的元素。子元素选择器使用大于号">"做为连接符。如果您不希望选择任意的后代元素&#xff0c;而是希望缩小范围&#xff0c;只选择某个元素的子元素&#xff0c;请使用子元素选择器子元素选择器…

C# Collection was modified;enumeration operation may not execute

一、问题描述 在做 数组、列表、集合遍历时&#xff0c;可能我们会遇见这个问题。Collection was modified;enumeration operation may not execute &#xff0c;翻译的中文意思&#xff1a;集合已修改&#xff1b;枚举操作可能无法执行。 二、解决方案 就是在遍历时&#xff0…

xp系统安装金蝶k3服务器配置,XP单机版安装金蝶K3的13.1版本号,金蝶K3Wise安装步骤,安装成功...

要注意先安装IIS。再安装VS2008。我们会常常在控制面板里找不到“应用程序server”这个项目。我们须要依照以下的步骤来操作就会Ok。1.下载IIS6&#xff0c;放置到D盘根文件夹。2.在执行里输入&#xff1a;c:\Windows\inf\sysoc.inf即打开找到 [Components]段。加入&#xff1a…

通过django 执行命令或者脚本

1、执行django命令 下文的project1为project名&#xff0c;app1为app名 在django project 下执行&#xff1a;python manage.py shell # 可以在Python console里执行Python命令或者包含django的命令 > from app1.models import User > user User.objects.get(name"…

服务器kvm切换器维修,KVM切换器常见问题

数据中心在使用kvm开关的过程中有时会遇到一些使用问题。如果他们不能及时解决问题&#xff0c;就会影响数据中心的有效管理。小编辑总结了一些常见的问题并给出了详细的答案。我希望能帮助每一个人。经常问的问题和答案&#xff1a;i.用于初始连接的kvm转换器&#xff0c;kvm开…

Zulip 2.0.3 发布,功能强大的群组聊天软件

Zulip 2.0.3 发布了&#xff0c;Zulip 是一个强大的开源群组聊天软件。 用 Python 编写&#xff0c;使用 Django 框架&#xff0c;支持通过会话流的私人消息和群聊。Zulip 还支持快速搜索、拖放文件上传、图像预览、组私人消息、可听通知、错过电子邮件消息提醒&#xff0c;桌面…

ifix怎么装服务器系统上,ifix服务器和客户端配置

ifix服务器和客户端配置 内容精选换一换准备好服务端和客户端&#xff0c;根据组网规划完成物理服务器的物理组网。本文档中以3台客户端和3台TaiShan服务器作为服务端为例。本次部署流程中以3台客户端节点和3台TaiShan 200 服务器(型号2280)作为存储节点&#xff0c;网络包含前…

接口测试工具Postman(转)

接口测试工具Postman Postman是一款功能强大的HTTP调试与模拟插件&#xff0c;不仅可以调试简单的CSS、HTML、脚本等网页的基本信息&#xff0c;它还可以发送几乎所有类型的HTTP请求。Postman适用于不同的操作系统&#xff0c;Mac、WindowsX32、Windows X64、Linux系统等。本篇…

洛谷 P1372 又是毕业季I

可能所有的数论题都是这样玄学.... 题目链接&#xff1a;https://www.luogu.org/problemnew/show/P1372 这道题通过暴力的枚举可以发现是不可做的&#xff08;当然我也不会做&#xff09; 然后就有了这样一个思路&#xff1a; 这道题就是求&#xff1a;从1~n中取k个数&#xff…

查看游戏服务器ip地址网站,如何查看游戏服务器IP地址

如何尽量使网络游戏避免卡机呢&#xff1f;高带宽&#xff0c;短延时&#xff0c;丢包率这是大家都知道的&#xff0c;还有重要的一点大家容易忽视&#xff0c;卡机与选择的游戏分区有着密切的联系&#xff0c;选择合适的游戏服务器(南北电信运营商之分)最为重要。1、先选择一个…

SUN服务器清除所有报错信息,SUN服务器可能遇到的问题总结.doc

SUN服务器可能遇到的问题总结(一)1) Q&#xff1a;现在遇到这样一个问题&#xff0c;telnet一台SUN机时报下面的错误&#xff1a; No utmpx entry. You must exec "login" from the lowest level "shell".我做了下面的处理后&#xff1a; cd /var/adm mv u…

在线图表编辑工具 draw.io 10.6.5 版本发布

draw.io 10.6.5 版本已发布&#xff0c;draw.io 是一款在线图表编辑工具, 可以用来编辑工作流、BPM、org charts、UML、ER图、网络拓朴图等。 新版本更新内容如下&#xff1a; 修复 VSDX 导入的类型变体逻辑 &#xff08;style variation logic&#xff09; 同一天发布的 10.6.…