学习typescript(二)
学习typescript(二)
ts 与 js 交互
ts 调用 js
module使用
分为两种情况:
ts调用自己写的jsts调用别人写的js也就通过npm安装的
第一种情况处理如下:
tsconfig.json的compilerOptions中加入"allowJs": true选项- 在任何一个
ts文件中加入declare function require(path: string): any;, 使用require语法,例如:const test = require('./test2') - 另一个使用方法,直接使用
ts的导入语法:import test = require('./test2)
第二种情况处理如下:
跟第一种方法类似进行处理。
global
node 中有一个全局变量 global 和 module.exports 怎样使用呢?
解决方案:
在 ts 加入如下:
declare var module: any;
declare var global: any;
就可以正常使用
js 调用 ts
js 不能直接 ts,而 ts 能直接调用 js,js 能调用 ts 的编绎成果.
这其中关键是 js 与 ts 的模块系统编绎结果之间的问题。
// ts 语法
export const test1 = (x) => x + 1
// exports.test1 = (x) => x + 1 cmd
export default const test2 = (x) => x + 1
// export default const test2 => x => x + 1 es6 语法
// 注意: es6语法 import 是的 node 环境中无法使用的
export {
foo as foo1,
foo1 as foo2
}
// 上面等于 js 语法
// exports.foo1 = foo
// exports.foo2 = foo1
// 对 export 赋值
const f1 = () => console.log(1)
const f2 = () => console.log(1)
const f3 = () => console.log(1)
export = {
f1,
f2,
f3
}
// 不过上面这种语法别的 `ts文件导入时需使用`
import ts = require('bluebird')
// es6
//exports = {
// f1,
// f2,
// f3
// }
import daf from 'bluebird' // 这种语法只适合有 default 导出的方法
总结
ts 的语法是使用 import from,这个语法有独特的行为, 表现在会针对 default 进行处理。
- 如果被导入的文件没有使用
default,那只能使用import * as from语法 - 如果被导入的文件使用了
default,import xxx from语法就是把默认导出对象赋值给xxx ts语法基本上跟es6的一致。- default 也能正常使用,但是与编绎结果与正常的
js交互会有问题,因此不能使用default。
所以, ts 模块系统使用原则:
- 永远只在
ts内部使用export default - 在
ts调用js时使用import * as XXX或者使用构析语法import {xxx} from '.xxx' ts调用js时, 如果想使用js提示的话使用import语法- 如果不想使用提示,使用
require语法。
js 使用原则:
- 导出模块只这样使用
module.exports
学习typescript(二)的更多相关文章
- Typescript 学习笔记二:数据类型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- 学习TypeScript,笔记一:TypeScript的简介与数据类型
该文章用于督促自己学习TypeScript,作为学笔记进行保存,如果有错误的地方欢迎指正 2019-03-27 16:50:03 一.什么是TypeScript? TypeScript是javasc ...
- crawler4j 学习(二)
crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...
- 从零开始学习jQuery (二) 万能的选择器
本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...
- Android Animation学习(二) ApiDemos解析:基本Animators使用
Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...
- AspectJ基础学习之二搭建环境(转载)
AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
随机推荐
- BZOJ_1095_[ZJOI2007]Hide 捉迷藏_动态点分治+堆
BZOJ_1095_[ZJOI2007]Hide 捉迷藏_动态点分治+堆 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子 ...
- SVN 如何更换IP地址
一.进去项目空白处. 二.点击右键TortoiseSVN. 三.选中Relocate. 四.弹出框如下: 把原来的IP地址更换成新的IP地址,再点击OK就可以了.
- DIY一个DNS查询器:程序实现
上一篇文章<DIY一个DNS查询器:了解DNS协议>中讲了DNS查询协议的原理和数据结构.经过两个星期的开发,完成了该查询器的编写.期间也遇到了一些问题,如: 1资源记录(Resource ...
- Azure REST API (5) 中国Azure EA Portal Billing API
<Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. EA Portal的管理url是:https://ea.azure ...
- 有关如何线程安全的使用map(hashMap)
最近在写一个多线程中控制输出顺序的系统中的一个代码,使用了map的数据结构.具体的业务是需要一个单例的对象,然后需要在多线程的环境下实现添加和删除的操作.部分代码如下: public class Up ...
- sed的基础用法简介
sed 最近学习了一些sed的相关知识,初步接触sed以后给我的感受主要有两点.首先是sed强大的功能,学了以后发现之前写的脚本利用sed以后会简化很多啊,具体的有些利用sed编辑shell脚本的思路 ...
- java保留小数位数
System.out.println(String.format("%.5f",new Main().minRadius(n,m)));
- c# Marshal.PtrToStructure(StructPtr, typeof(T)); 特别注意
以下异常:Marshal.PtrToStructure(StructPtr, typeof(T)); 原因: 在实际使用中 T 没有一个 parameterless constructor 于是加 ...
- 计算机网络自顶向下方法第3章-传输层 (Transport Layer).1
3.1 概述和运输层服务 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信(logic communication)功能. 3.1.1 运输层和网络层的关系 网络层提供了主机之间的逻辑通信,而 ...
- 你了解SVN, CVS等版本控制器吗?
版本控制器SVN, CVS是两种版本控制器, 需要配套相关的SVN, CVS服务器, SCM是xcode里面配置版本控制的地方, 版本控制的原理就是A和B同时开发一个项目, A写完当天的代码之后把代码 ...