44

为 Vue3 学点 TypeScript (1), 体验 TypeScript

 4 years ago
source link: https://juejin.im/post/5d19ad6de51d451063431864
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

为 Vue3 学点 TypeScript , 体验 TypeScript

2019年07月01日 阅读 16600

为 Vue3 学点 TypeScript , 体验 TypeScript

第一课, 体验typescript

第二课, 基础类型和入门高级类型

第三课, 泛型

第四课, 解读高级类型

第五课, 命名空间(namespace)是什么

特别篇, 在vue3🔥源码中学会typescript🦕 - "is"

第六课, 什么是声明文件(declare)? 🦕 - 全局声明篇

vue3要来了

看了vue conf 2019的视频, 特别兴奋, vue3要来了! vue3是用typescript开发的, 我揣测在vue的带领下typescript会成为主流呢, 要不先学点.

1


1

19年最酷的前端技术

我是19年初开始使用的typescript, 自从开始用上了就喜欢上了, 真的爱不释手, 最爱他几点:

  1. 很多小错误比如: 对象的字段不存在或者字段名字拼写错误, 编辑器会在写代码的时候就提示你, 降低出低级错误的几率.
  2. 标注了类型的变量, 使用的时候编辑器都会列出变量上的方法和属性, 开发体验更舒服.
  3. 很多大神的项目都用typescript开发, 看源码的时候因为有了类型标注, 更容易理解.
  4. 让自己写的代码看起来很厉害的样子🐂.
typescript代码

我也希望更多的同行都开始用typescript, 让他成为前端涨工资的又一个工具(回想下webpack和vue给你带来什么, 最早"吃螃蟹"的人, 肯定享受最大的红利).

放几个我学习typescript过程中写的项目,自从用了typescript就特别喜欢造轮子, 写的不好, 就是有份热情, 抛砖引玉, 大家肯定能写出更好的.

手势库: github.com/any86/any-t…

命令式调用vue组件: github.com/any86/vue-c…

工作中常用的一些代码片段: github.com/any86/usefu…

一个mini的事件管理器: github.com/any86/any-e…

typescript工作原理

通过typescript命令行工具, 把typescript转成javascript, 从而支持在浏览器运行.

注: 后面的文章中typescript简称ts, javascript简称js.

typescript特性

ts和js最大的区别就是ts多了类型注解功能, 通过名字中的"type"也能看出语言的重点在"类型"上. 这个类型分为基础类型高级类型, 高级类型就是通过基础类型组成的自定义类型.

ts中包含了boolean / number / string / object / 数组(数组的表示有多种, 后续文章会展开) / 元组 / 枚举 / any / Undefined / Null / Void / Never

any是本文的重点, 一会会对他着重讲解.

大部分情况是对object类型做更细的标注, 此处不多讲, 先放个例子了解即可, 知道关键词interface即可, 中文名"接口", 后续章节会展开.

interface Article {
    title: string;
    count: number;
    content: string;
    tags: string[]; // 数组里的元素都是字符串
}
复制代码
聪明的vscode

当我们使用vscode编辑器的时候, 编辑器会根据我们的"类型注解"进行代码提示错误提示:

1

类型写错了, 也会提示:

1

动手开始, 安装

  1. 安装nodejs
  2. 在命令行运行npm i -g typescript, 安装编译器到全局.
  3. 安装vscode编辑器.

开始写代码

  1. 建立一个文件夹, 在里面新建一个hello.ts文件, 注意扩展名是ts.
  2. vscode打开hello.ts文件.
  3. 输入如下代码, 让我们体验下ts:
interface A {
    a:number,
    b:string
}
let obj:A = {a:123,b:'456'};
复制代码
  1. 命令行进入文件夹, 执行命令
npx tsc hello.ts
复制代码

好了我们可以看下文件内部多了一个hello.js, 打开看看:

var obj = { a: 123, b: '456' };
复制代码

代码中的"类型注解"不见了 ,我们的ts被编译成js了, 是不是很神奇.

interface A {
    a:number,
    b:string
}
// 错误, 会提示b的类型错误, 应该为string类型
let obj:A = {a:123,b:456};
复制代码

any类型

any代表任意类型, 这个类型特别适合ts新手, 初期有些类型不知道如何表达, 我们就可以暂时使用any表达, 等熟练ts后再标注精准的类型.

下面的情况新手可能就不会了, 以为n标记为number, 但是循环中i大于5的时候就是字符串了, 所以ts就会提示错误.

let n:number;
for(let i = 0;i<10;i++) {
    if(i <= 5) n = 10;
    else n = '100';
}
// ts提示: 不能将类型“"100"”分配给类型“number”
复制代码

作为新手如果初期你不知道"联合类型"这个概念, 你就可以直接把n标记为any:

// 熟练后会是这么标记的 
// let n:string|number
let n:any;
for(let i = 0;i<10;i++) {
    if(i <= 5) n = 10;
    else n = '100';
}
复制代码

突然想起如果我们的配置不一样,可能会看到不一样的提示, 所以补充下我的ts配置, 请大家学习的时候按照这个配置来学习本课程, 每个配置我都加了注释, 如果译文请在下方留言, 知无不言.

用法也很简单, tsconfig.json放在你项目的根目录即可:

// tsconfig.json
{
    "compilerOptions": {
        // 不报告执行不到的代码错误。
        "allowUnreachableCode": true,
        // 必须标注为null类型,才可以赋值为null
        "strictNullChecks": true,
        // 严格模式, 强烈建议开启
        "strict": true,
        // 支持别名导入:
        // import * as React from "react"
        "esModuleInterop": true,
        // 目标js的版本
        "target": "es5",
        // 目标代码的模块结构版本
        "module": "es6",
        // 在表达式和声明上有隐含的 any类型时报错。
        "noImplicitAny": true,
        // 删除注释
        "removeComments": true,
        // 保留 const和 enum声明
        "preserveConstEnums": false,
        // 生成sourceMap    
        "sourceMap": true,
        // 目标文件所在路径
        "outDir": "./lib",
        // 编译过程中需要引入的库文件的列表
        "lib": [
            "dom",
            "es7"
        ],
        // 额外支持解构/forof等功能
        "downlevelIteration": true,
        // 是否生成声明文件
        "declaration": true,
        // 声明文件路径
        "declarationDir": "./lib",
        // 此处设置为node,才能解析import xx from 'xx'
        "moduleResolution": "node"
    },
    // 入口文件
    "include": [
        "src/main.ts"
    ]
}
复制代码

19年ts一定大火, 请大家放心学ts吧, 初期开发可以先用any体验ts, 慢慢学习1个月左右其实就可以实战了,

感谢大家的阅读, 如有疑问可以加群🚀, 群里有好多有趣的前端的小伙伴, 让我们共同学习成长吧!

可加我微信, 我拉你进入微信群(由于腾讯对微信群的100人限制, 超过100人后必须由我拉进去)

1

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK