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

TypeScript 简介

参考文章:http://ts.xcatliu.com/

一、简介

什么是 TypeScript
  添加了类型系统的 JavaScript,适用于任何规模的项目。

TypeScript 的特性
  静态类型:在编译阶段就能确定每个变量的类型【JavaScript:动态类型,运行时确定变量的类型】
  弱类型:允许隐式类型转换【完全兼容JavaScript】

二、基础

1. 原始数据类型 + 任意值 + 类型推论
  布尔值、数值、字符串、null、undefined、Symbol【ES6】
  
  any: 任意值,允许赋值为任意类型
   1) 声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值;
   2) 变量声明未指定类型时,会被识别为任意值类型
   
  类型推论:如果没有明确的指定类型,ts会依照类型推论(Type Inference)的规则推断出一个类型;

2. 联合类型

    let myFavoriteNumber: string | number;
    myFavoriteNumber = 'seven';
    myFavoriteNumber = 7;

3. 接口:用来定义对象

  1. 赋值的时候,变量的形状必须和接口的形状保持一致,多少一些属性都不行;
 interface Person {
    	name: string;
         age: number;
      }
      let tom: Person = {
         name: 'tom',
         age: 25
      }
  1. 可选属性(?:) :该属性可以不存在
 interface Person {
    	name: string;
         age: number;
         gender?: string;
      }
      let tom: Person = {
         name: 'tom',
         age: 25
      }
  1. 任意属性
interface Person {
    	name: string;
         age: number;
         [propName: string]: any; // 定义了任意属性取 string 类型的值
      }
      let tom: Person = {
         name: 'tom',
         age: 25,
         gender: 'male'
      } 
  一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集:
  一个接口中只能定义一个任意属性。如果接口中有多个类型的属性,则可以在任意属性中使用联合类型: 

4. 数组的类型

1.常用定义方法
【类型 + 方括号】let arr: number[] = [1,2,3,4];

2.【数组泛型】let arr: Array = [1,2,3,4];

5.函数的类型

  1. 函数声明:
// 输入多余的(或者少于要求的)参数,是不被允许的
function sum(x:number,y:number): number{
   return x+y;
} 
  1. 函数可选参数
//  可选参数后面不允许再出现必需参数了
function buildName(firstName: string, lastName?: string) {
     if (lastName) {
        return firstName + ' ' + lastName;
     } else {
        return firstName;
     }
    }
   let tomcat = buildName('Tom', 'Cat');
   let tom = buildName('Tom');

6.类型断言.
手动指定一个值的类型【语法:值 as 类型】,只会影响 TypeScript 编译时的类型。

 1) 联合类型可以被断言为其中一个类型;    
 2) 父类可以被断言为子类;  
 3) 任何类型都可以被断言为 any;  
   理想情况下,TypeScript 的类型系统运转良好,每个值的类型都具体而精确。
   (Window as any).nub = 1; // 在any类型的变量上,访问任务属性都是可以的。
 4) any 可以被断言为任何类型;
   通过类型断言及时的把 any 断言为精确的类型,亡羊补牢,使我们的代码向着高可维护性的目标发展
 5) 类型断言的限制
   要使得 A 能够被断言为 B,只需要 A 兼容 B 或 B 兼容 A 即可;
 6) !【感叹号】:非null、非undefined的类型断言;
备注:
  1. 使用类型断言时一定要格外小心,尽量避免断言后调用方法或引用深层属性,以减少不必要的运行时错误
  2. 类型断言不是类型转换,它不会真的影响到变量的类型

相关文章:

  • css过渡效果
  • mysql中EXPLAIN命令解析
  • 【NodeJs-5天学习】第二天篇④ ——项目模块化
  • LeetCode 110.平衡二叉树 (C++)
  • 基于SpringBoot的校园闲置物品交易管理系统
  • 在线表格 循环替换 脚本
  • 量化投资学习——股指期货研究(二)
  • npm下载包速度慢-淘宝NPM镜像服务器--如何切换其他服务器下载
  • 基于elasticjob的入门maven项目搭建
  • 【校招VIP】产品项目分析之竞品分析
  • 服务端(后端)主动通知前端的实现:WebSocket(springboot中使用WebSocket案例)
  • 计算机毕业设计django基于python教学互动系统(源码+系统+mysql数据库+Lw文档)
  • 2022深圳xxx校招Java笔试题目(选择题+简答题)
  • 神经网络训练电脑配置,cpu可以训练神经网络吗
  • RFID读写器的功能
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 【附node操作实例】redis简明入门系列—字符串类型
  • ES6--对象的扩展
  • GraphQL学习过程应该是这样的
  • HTTP--网络协议分层,http历史(二)
  • HTTP中GET与POST的区别 99%的错误认识
  • Java小白进阶笔记(3)-初级面向对象
  • MD5加密原理解析及OC版原理实现
  • Redis 懒删除(lazy free)简史
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 闭包,sync使用细节
  • 初识MongoDB分片
  • 服务器之间,相同帐号,实现免密钥登录
  • 警报:线上事故之CountDownLatch的威力
  • 前端之Sass/Scss实战笔记
  • 如何在GitHub上创建个人博客
  • 深入浅出webpack学习(1)--核心概念
  • 我的业余项目总结
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • #pragma multi_compile #pragma shader_feature
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #每日一题合集#牛客JZ23-JZ33
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $.proxy和$.extend
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (10)STL算法之搜索(二) 二分查找
  • (11)MATLAB PCA+SVM 人脸识别
  • (12)Linux 常见的三种进程状态
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C语言)字符分类函数
  • (LeetCode) T14. Longest Common Prefix
  • (libusb) usb口自动刷新
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (六)激光线扫描-三维重建
  • (四)图像的%2线性拉伸
  • (算法)前K大的和
  • (转)3D模板阴影原理
  • (转)Linq学习笔记