强类型与弱类型(类型安全)

  • 强类型不允许随意的隐士类型转换,而弱类型是允许的
  • 变量类型允许随时改变的特点,不是强弱类型的差异

静态类型与动态类型(类型检查)

  • 静态类型:一个变量声明时它的类型就是明确的,如果声明后,它的类型就不允许修改。
  • 动态类型:运行阶段才能够明确变量类型,而且变量的类型随时可以改变。

JavaScript 自有类型系统的问题

  • 任性:缺失了类型系统的可靠性
  • javaScript没有编译环节,初期发展就设计成弱类型、动态类型语言
  • 大规模应用下,这种优势也是劣势

弱类型的问题

    • 君子约定有隐患,强制要求有保障
  • 强类型的优势
    • 错误更早暴露
    • 代码更只能,编程更准确
    • 重构更牢靠
    • 减少不必要的类型判断

Flow静态类型检查方案 (工具)

  • 参数-> 类型注解
  • 使用-> yarn add flow-bin --dev
  • flow编译移除注解-> yarn add flow-remove-types --dev
    • yarn flow-remove-types src -d dist
  • 使用babel代替flow工具
    • yarn add @babel/core @babel/cli @babel/preset-flow --dev
    • 项目中引入.babelrc 文件{“presets”: ["babel/preset-flow"]}
    • yarn babel src -d dist
  • vscode插件:flow-language-support 开箱即用
  • flow官网支持的编辑器 https://flow.org/en/docs/editors
  • flow 类型推断
    • 建议手动添加类型注解
    • 原始类型
      • const a: string = 'aax';
        const b: number = Infinity;
        const c: boolean = false;
        const d: null = null;
        const e: void = undefined;
        const f: symbol = Symbol();
    • 数组类型
      • const arr1: Array<number> = [1,2,3];
        
        const arr2: number[] = [1,2,3];

        // 元组 数组长度固定
        const arr3: [string, number] = ['hello', 123]
    • 对象类型
      • const obj1: {foo: String, bar: number} = {foo: 'string', bar: 100}
        
        const obj2: {foo?: String, bar: number} = { bar: 100 }
        
        const obj3: { [string]: string } = {}
        obj3.key1 = 'value1'
        obj3.key2 = 100
    • 函数类型

      • function foo(callback: (string, number) => void) {
        callback(string, 100)
        }
    • 字面量类型
      • const type: 'success' | 'warning' | 'danger' = 'success'
        
        type StringOrNumber = string | number
        
        const b: StringOrNumber = 'string' // 100
        
        const gender: ?number = null // undefined
        
        const gender2: number | null | void = null
    • mixed与any类型
      • 都是指定了任意类型,但是any是弱类型(主要是兼容老代码用的,实际项目中不建议使用),mixed是强类型。执行阶段会非法校验

类型手册:https://www.saltycrane.com/cheat-sheets/flow-type/latest/

运行环境API 对象

新手入门typeScript的更多相关文章

  1. 新手入门指导:Vue 2.0 的建议学习顺序

    起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...

  2. Flume NG Getting Started(Flume NG 新手入门指南)

    Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...

  3. 原创:从零开始,微信小程序新手入门宝典《一》

    为了方便大家了解并入门微信小程序,我将一些可能会需要的知识,列在这里,让大家方便的从零开始学习:一:微信小程序的特点张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的 ...

  4. 【原创】新手入门一篇就够:从零开发移动端IM

    一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...

  5. 课程上线 -“新手入门 : Windows Phone 8.1 开发”

    经过近1个月的准备和录制,“新手入门 : Windows Phone 8.1 开发”系列课程已经在Microsoft 虚拟学院上线,链接地址为:http://www.microsoftvirtuala ...

  6. WordPress建站 新手入门

    WordPress建站 新手入门教程系列 1. WordPress入门 之 什么是WordPress? 2. WordPress入门 之 搭建WordPress站点需要什么条件? 3. WordPre ...

  7. 安卓自动化测试(2)Robotium环境搭建与新手入门教程

    Robotium环境搭建与新手入门教程 准备工具:Robotium资料下载 知识准备: java基础知识,如基本的数据结构.语法结构.类.继承等 对Android系统较为熟悉,了解四大组件,会编写简单 ...

  8. mongodb新手入门,mongodb命令学习

    下面来总结一下mongodb新手入门的常用命令吧.要是您是mongodb新手,可以看下. 1,show dbs 查询mongodb里面的数据库列表 如果想查看当前连接在哪个数据库下面,可以直接输入db ...

  9. iOS简易柱状图(带动画)--新手入门篇

    叨逼叨 好久没更新博客了,才几个月,发生了好多事情,处理了好多事情.不变的是写代码依然在继续. 做点啥子 看看objective-c的书,学着写了个柱状图,只是练习的demo而已,iOS上的图表控件已 ...

随机推荐

  1. Java【常用的日期操作】

    目录 1.设置时间 2.获取年月日时分秒 3.通过运算获取时间 4.和Date类转换 5.格式化时间 6.新功能LocalDate:当前日期格式化 7.示例 java.util.Calendar 类是 ...

  2. css相关,position定位详解

    CSS 有两个最重要的基本属性,前端开发必须掌握:display 和 position. display属性指定网页的布局.两个重要的布局,弹性布局flex和网格布局grid. 本文介绍非常有用的po ...

  3. 案例 stm32单片机,adc的双通道+dma 内部温度

    可以这样理解 先配置adc :有几个通道就配置几个通道. 然后配置dma,dma是针对adc的,而不是针对通道的. 一开始我以为一个adc通道对应一个dma通道.(这里是错的,其实是我想复杂了) 一个 ...

  4. 4.3 rust func closure

    fn add_one_v1 (x: u32) -> u32 { x + 1 } let add_one_v2 = |x: u32| -> u32 { x + 1 }; let add_on ...

  5. SpringCloud微服务-Eureka服务注册与发现

    一. Eureka 是什么? Eureka是Netflix的一个子模块,也是核心模块之一.Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移.服务注册与发现对微服务 ...

  6. jQuery - 的几种删除方法,还有他们的区别

    1.empty() 清空节点,它能清空元素中的所有后代节点,不能删除自己本身这个节点 2.remove() 该节点与该节点所包含的所有后代节点将同时被删除,提供传递一个筛选的表达式,删除指定合集中的元 ...

  7. 【C++】最长回文子串/动态规划

    ACM #include <bits/stdc++.h> using namespace std; const int maxn = 1010; char S[maxn]; int dp[ ...

  8. 【C#】【假条生成系统】【单位剖析】如何判断在文本框输入了几个人名?

    我们规定,人名和人名之间使用顿号隔开 那么, 1个人,就是0个顿号 2个人,就是1个顿号 3个人,就是2个顿号 -- 所以我们可以判断文本框中顿号的出现次数. 出现0次,则为1人,出1次,则为两人. ...

  9. Java 将Word转为OFD

    通常在工作中比较常用到的Microsoft Word是属于国外的文档内容编辑软件,其编译技术均属国外.而OFD是一种我国的自主文档格式,在某些特定行业或企业的文档存储技术上是一种更为安全的选择.下面将 ...

  10. Rust开发环境搭建和hello world工程

    windows10 WSL 打开wsl,执行以下命令 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 出现安装选项,选择1 ...