TS学习笔记(一)

JS的痛点

由于各种历史因素,JavaScript语言本身存在很多的缺点:
比如ES5以及之前的使用的var关键字关于作用域的问题;
比如最初JavaScript设计的数组类型并不是连续的内存空间;
比如直到今天JavaScript也没有加入类型检测这一机制;

但毫无疑问JavaScript正在慢慢变好
不可否认的是,JavaScript正在慢慢变得越来越好,无论是从底层设计还是应用层面。
ES6、7、8等的推出,每次都会让这门语言更加现代、更加安全、更加方便
但是直到今天,JavaScript在类型检测上依然是毫无进展,JavaScript不可以在代码编译期间发现代码的错误

例子:

function foo(message)
if (message){
	console.log(message.length);
}
foo("Hello World");
foo();//报错
//永远执行不到
console.log("渲染界面成千上万行的DavaScript代码需要执行,去渲染界面")

当然我们可以给JavaScript加上很多限制,在开发中就可以很好的避免这样的问题了:
比如我们的getLength函数中str是一个必传的类型,没有调用者没有传值编译期间就会报错:
比如我们要求它的必须是一个String类型,传入其他类型就直接报错:
那么很多的错误问题在编译期间就被发现,而不是等到运行时再去发现和修改;

我们已经简单体会到没有类型检查带来的一些问题,JavaScript因为从设计之初就没有考虑类型的约束问题,所以造成了前端开发人员关于类型思维的缺失:
前端开发人员通常不关心变量或者参数是什么类型的,如果在必须确定类型时,我们往往需要使用各种判断验证

Vue2.x的时候采用的就是flow来做类型检查;
Vue3.x已经全线转向TypeScript,98.3%使用TypeScript进行了重构;
而Angular在很早期就使用TypeScript进行了项目重构并且需要使用TypeScript来进行开发;

认识TypeScript

TypeScript是拥有类型的JavaScript超集,它可以编译成普通、干净、完整的JavaScript代码。
理解:
我们可以将TypeScripti理解成加强版的JavaScript:
JavaScript所拥有的特性,TypeScript全部都是支持的,并且它紧随ECMAScript的标准,所以ES6、ES7、ES8等新语法标准,它都是支持的;
在语言层面上,不仅仅增加了类型约束,而且包括一些语法的扩展,比如枚举类型(Eum)、元组类型(Tuple)等;
TypeScript在实现新特性的同时,总是保持和ES标准的同步甚至是领先;
并且TypeScript最终会被编译成JavaScript代码,所以你并不需要担心它的兼容性问题,在编译时也不需要借助于Babel这样的工具;
所以,我们可以把TypeScript理解成更加强大的JavaScript,不仅让JavaScript更加安全,而目给它带来了诸多好用的好用特性

众多项目采用TypeScript
正是因为有这些特性,TypeScript目前已经在很多地方被应用:
Angular源码在很早就使用TypeScript来进行了重写,并且开发Angular也需要掌握TypeScript;
Vue3源码也采用了TypeScript进行重写,在前面阅读源码时我们看到大量TypeScript的语法;
包括目前已经变成最流行的编辑器VSCode也是使用TypeScript来完成的;
包括在React中已经使用的ant-design的UI库,也大量使用TypeScript来编写;
目前公司非常流行Vue3+TypeScript、React+TypeScript的开发模式;
包括小程序开发,也是支持TypeScript的;

TypeScript的编译环境

安装tsc
npm install typescript -g
tsc --version
重名冲突的解决方案:
export{} 当做模块 有自己的作用域
搭建自动转换js环境:
1.通过webpack搭建ts环境(做项目)
npm init 创建package.json
npm install webpack webpack-cli -D 本地安装 出现node_modules和package-lock.json
npm install ts-loader typescript -D
自建webpack.config.js配置文件

const path require('path')
module.exports={
	entry:"./src/main.ts",
	output:{
		path:path.resolve(__dirname,"./dist"),
		filename:"bundle.js"
	},
	resolve:{
		extensions:[".ts"]        //因为前面有AB两个ts文件,BrequireA时文件末尾不带.ts
	},
	modules:{
		rules:[
			{
				test:/\.ts$/,
				loader:'ts-loader'
			}
		]
	}
}

在package.json里的scripts中添加"build":"webpack"
由于会报错error while parsing tsconfig.json(缺少ts的配置文件),那么就执行tsc --init
最后npm run build 把生成的js引入html即可

2.ts-node -g>安装(依赖另外两个包npm install tslib @types/node -g )
ts-node TypeScript.ts
编译>跑在node(学语法)

详细配置指路链接

TS学习笔记(二)

第一篇主要讲了对ts的认识,需要关注与js的区别,还有环境的搭建。第二篇开始记录ts相关语法。指路TS学习笔记(二)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来回答你关于 TypeScript 中 Symbol 和模块的问题。 首先,Symbol 是 TypeScript 中的一种新的基本数据类型,它可以用来创建唯一的标识符。在 TypeScript 中,Symbol 主要有两种用法: 1. 作为对象属性的键值,用来表示一个对象属性的唯一标识符。 2. 作为一个类的静态属性或方法,用来表示该类的唯一标识符。 下面是一个使用 Symbol 作为对象属性键值的示例: ```typescript const key = Symbol('myKey'); const obj = { [key]: 'value' }; console.log(obj[key]); // 输出'value' ``` 在上面的代码中,我们使用 Symbol('myKey') 创建了一个新的 Symbol,然后将该 Symbol 作为对象 obj 的属性键值,并赋值为'value'。最后,我们通过 obj[key] 的方式来访问该属性,并输出了'value'。 另外,模块是 TypeScript 中的另一个重要概念,它用来组织和管理代码。在 TypeScript 中,模块可以使用 import 和 export 命令来进行导入和导出。下面是一个使用模块的示例: ```typescript // moduleA.ts export const num = 123; // moduleB.ts import { num } from './moduleA'; console.log(num); // 输出123 ``` 在上面的代码中,我们定义了一个名为 num 的常量,并将其导出。然后,在另一个模块中,我们使用 import 命令将 num 导入,并通过 console.log 输出了它的值。 这就是关于 TypeScript 中 Symbol 和模块的简单介绍,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值