TypeScript – Get Started
前言
我学 TypeScript 的时候是 Angular 2.0 beta 的年代... 现在 Angular 都快 14 了.
但由于已经有 1 年半没有写 Angular 和 TypeScript 了, 所以特地写来复习 warm up 一下, 也把这些年零零散散的知识集中写一下做个记入.
参考
Youtube – TypeScript Tutorial 1 – 21 非常简单的入门
Youtube – TypeScript Course for Beginners - Learn TypeScript from Scratch! 前半段是简单入门, 后半段的 config 值得看看.
Youtube – Typescript tsconfig tutorial 教 tsconfig
开发工具
Live Server (VS Code Plug-in)
前端开发少不了上面 3 个, 就不多介绍了
安装
创建项目
mkdir play-typescript
cd play-typescript
yarn init
安装 typescript
npm install typescript --global
yarn add typescript --dev
一个全局, 一个本地. compile 会以本地的为标准, 全局的目的是要它的 command
Compile & Run
打开 VS Code, 创建 index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="./index.js" defer></script> <!-- 关键 -->
</head>
<body></body>
</html>
创建 index.ts

const h1 = document.createElement("h1");
h1.appendChild(document.createTextNode("Hello World"));
document.body.appendChild(h1);

运行命令
tsc index.ts
然后就会看见 index.js 被编辑出来了.

运行 Live Server

效果

这个就是最最最基本的使用方式
Problem with Import Module
参考: stackoverflow – How to use typescript in browser?
创建 index2.ts, export function
export function appendHelloWorld() {
const h1 = document.createElement("h1");
h1.appendChild(document.createTextNode("Hello World"));
document.body.appendChild(h1);
}
在 index.ts, import 这个方法
import { appendHelloWorld } from "./index2";
appendHelloWorld();
在 index.html 的 script 加上 type="module". 要使用 import 关键字, html script 必须加上 type=module 哦
<script type="module" src="./index.js" defer></script>
运行命令
tsc index.ts
compiled js

虽然 index 和 index2 都成功 compile 成了 js, 但是它默认使用的 module 方式是 CommonJS 的 (这个是给 Node.js 用的)
如果运行 index.html 的话会看见 error "exports is not defined"

修改 tsconfig 的 module, 运行命令
tsc index.ts --module es2015
module 的默认是 CommonJS 所以不可以用在 browser enviroment, browser 必须用 module es2015 也就是 es6 或以上.
这时运行 index.html 会看见 404 error

这是因为 import index2 的路径没有 file extension. 它是一个大 issue 来的:
Github – Compiled JavaScript import is missing file extension
Github – Compiled JavaScript import is missing file extension (Working as Intended)
Typescript 的原则是 JS 语句一定可以跑, 而 import { appendHelloWorld } from './index2' 对 Typescript 来说是 js 语句, 所以它不会去添加 extension. 反而要求写的时候一定要放 .js
如果你用 webpack 之类的打包工具, 它就会处理这些. 但如果没有, 那么 import 一定要声明 .js

在 index.ts 的 import 加上 index2.js, 这样就可以了.

进阶
上面这个 get started 只能用在非常简单的单元测试上. 如果想依赖一些 library 的话, 上面是不够用的.
所以我又写了一篇进阶版本 :
不过这个版本依然只是用于单元测试哦, 前端正式开发的话还是需要 bundler 的, 想了解可以看这篇: Webpack 学习笔记
TypeScript – Get Started的更多相关文章
- TypeScript: Angular 2 的秘密武器(译)
本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...
- TypeScript为Zepto编写LazyLoad插件
平时项目中使用的全部是jQuery框架,但是对于做webapp来说jQuery太过于庞大,当然你可以选择jQuery 2.*针对移动端的版本. 这里我采用移动端使用率比较多的zepto框架,他跟jqu ...
- TypeScript Vs2013 下提示Can not compile modules unless '--module' flag is provided
VS在开发TypeScript程序时候,如果import了模块有的时候会有如下提示: 这种情况下,只需要对当前TypeScript项目生成设置为AMD规范即可!
- TypeScript
TypeScript: Angular 2 的秘密武器(译) 本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch? ...
- 打造TypeScript的Visual Studio Code开发环境
打造TypeScript的Visual Studio Code开发环境 本文转自:https://zhuanlan.zhihu.com/p/21611724 作者: 2gua TypeScript是由 ...
- 转职成为TypeScript程序员的参考手册
写在前面 作者并没有任何可以作为背书的履历来证明自己写作这份手册的分量. 其内容大都来自于TypeScript官方资料或者搜索引擎获得,期间掺杂少量作者的私见,并会标明. 大部分内容来自于http:/ ...
- Webstorm编译TypeScript
下载webstorm 下载node.js编译器npm Webstorm的安装很简单.但如果没有Java For Mac 环境打开Webstorm时会有提示,点击提示会跳转下载链接,下载安装就好. ...
- CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- 使用TypeScript拓展你自己的VS Code!
0x00 前言 在前几天的美国纽约,微软举行了Connect(); //2015大会.通过这次大会,我们可以很高兴的看到微软的确变得更加开放也更加务实了.当然,会上放出了不少新产品和新功能,其中就包括 ...
- 产品前端重构(TypeScript、MVC框架设计)
最近两周完成了对公司某一产品的前端重构,本文记录重构的主要思路及相关的设计内容. 公司期望把某一管理类信息系统从项目代码中抽取.重构为一个可复用的产品.该系统的前端是基于 ExtJs 5 进行构造的, ...
随机推荐
- vue中sass与SCSS的区别
在Vue中,通常使用SCSS(Sassy CSS)而不是Sass来编写样式.SCSS是Sass的一种语法扩展,提供了更多的功能和灵活性,因此在Vue项目中更常见.下面是Sass和SCSS之间的主要区别 ...
- BS架构和CS架构应用
概述 B/S结构即浏览器和服务器结构.它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Br ...
- [oeasy]python019_ 如何在github仓库中进入目录_找到程序代码_找到代码
继续运行 回忆上次内容 上上次 真写了万行代码 这 万行代码 都是写在明面上的 这次 使用git命令 下载了 github上面的仓库 添加图片注释,不超过 140 字(可选) 下载仓库 ...
- oeasy教您玩转vim - 16 跳到某行
跳到某行 回忆上节课内容 上下行 向 下 是 j 向 上 是 k 上下行首 向 下 到行首非空字符 + 向 上 到行首非空字符 - 这些 motion 都可以加上 [count] 来翻倍 首尾行 首行 ...
- Nacos 高级详解:提升你的开发和部署效率
Nacos 高级 一 .服务集群 需求 服务提供者搭建集群 服务调用者,依次显示集群中各服务的信息 搭建 修改服务提供方的controller,打印服务端端口号 package com.czxy.co ...
- U盘安装Ubuntu18.04系统
U盘安装Ubuntu18.04系统 一.安装盘制作 根据您当前使用系统的不同,需要不同的工具制作 U 盘启动安装盘.目前主要有 Linux 系统和 Windows 系统两类. 1.Linux 系统 ( ...
- PHP数组遍历的四种方法
PHP数组循环遍历的四种方式 [(重点)数组循环遍历的四种方式] 1,https://www.cnblogs.com/waj6511988/p/6927208.html 2,https://www ...
- 【ElasticSearch】突破深度分页限制的分页方案
一.场景需求 最近在忙一个新的项目,数据源是ES,但是功能就是对文档进行翻页查询 ES提供了分页查询,就是from + size深度查找,但是使用有限制,只能在1万条内 我和同事的意见是1万条之后的数 ...
- 【Java】JDBC Part1 数据库连接的演变
环境搭建 使用Maven工程的依赖项,如果普通工程就点注释的地址下载jar包即可 <dependencies> <!-- https://mvnrepository.com/arti ...
- 【Scala】04 对象特性Part1
1.声明式包管理: 一个Scala文件可以声明N个包 包的意义和Java的包管理是一样的 同样也需要import导入资源声明 package pkgA { import com.oracle.nio. ...