学习typescript(二)

ts 与 js 交互

ts 调用 js

module使用

分为两种情况:

  1. ts 调用自己写的 js
  2. ts 调用别人写的 js 也就通过 npm 安装的

第一种情况处理如下:

  1. tsconfig.jsoncompilerOptions 中加入 "allowJs": true 选项
  2. 在任何一个 ts 文件中加入 declare function require(path: string): any; , 使用 require 语法,例如:const test = require('./test2')
  3. 另一个使用方法,直接使用 ts 的导入语法: import test = require('./test2)

第二种情况处理如下:

跟第一种方法类似进行处理。

global

node 中有一个全局变量 globalmodule.exports 怎样使用呢?

解决方案:

ts 加入如下:

declare var module: any;
declare var global: any;

就可以正常使用

js 调用 ts

js 不能直接 ts,而 ts 能直接调用 jsjs 能调用 ts 的编绎成果.

这其中关键是 jsts 的模块系统编绎结果之间的问题。

// 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 进行处理。

  1. 如果被导入的文件没有使用 default,那只能使用 import * as from 语法
  2. 如果被导入的文件使用了 defaultimport xxx from 语法就是把默认导出对象赋值给 xxx
  3. ts 语法基本上跟 es6 的一致。
  4. default 也能正常使用,但是与编绎结果与正常的 js 交互会有问题,因此不能使用 default

所以, ts 模块系统使用原则:

  1. 永远只在 ts 内部使用 export default
  2. ts 调用 js 时使用 import * as XXX 或者使用构析语法 import {xxx} from '.xxx'
  3. ts 调用 js 时, 如果想使用 js 提示的话使用 import 语法
  4. 如果不想使用提示,使用 require 语法。

js 使用原则:

  1. 导出模块只这样使用 module.exports

github测试库

学习typescript(二)的更多相关文章

  1. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  2. 学习TypeScript,笔记一:TypeScript的简介与数据类型

    该文章用于督促自己学习TypeScript,作为学笔记进行保存,如果有错误的地方欢迎指正 2019-03-27  16:50:03 一.什么是TypeScript? TypeScript是javasc ...

  3. crawler4j 学习(二)

    crawler4j 学习(二) 实现控制器类以制定抓取的种子(seed).中间数据存储的文件夹.并发线程的数目: public class Controller { public static voi ...

  4. 从零开始学习jQuery (二) 万能的选择器

    本系列文章导航 从零开始学习jQuery (二) 万能的选择器 一.摘要 本章讲解jQuery最重要的选择器部分的知识. 有了jQuery的选择器我们几乎可以获取页面上任意的一个或一组对象, 可以明显 ...

  5. Android Animation学习(二) ApiDemos解析:基本Animators使用

    Android Animation学习(二) ApiDemos解析:基本Animatiors使用 Animator类提供了创建动画的基本结构,但是一般使用的是它的子类: ValueAnimator.O ...

  6. AspectJ基础学习之二搭建环境(转载)

    AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...

  7. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  8. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  9. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

随机推荐

  1. hdu-5754 Life Winner Bo(博弈)

    题目链接: Life Winner Bo Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 131072/131072 K (Java/ ...

  2. [ZJU 2112] Dynamic Rankings

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1901 [算法] 首先 , 考虑没有修改操作 不妨建立可持久化线段树 , 第i棵树维护 ...

  3. C++模板之typename和class关键字的区别

    我们都知道,在STL中基本上都使用了模板类的声明,即template.在模板类的声明中,我们有两种方式: template <class T> template <typename ...

  4. kafka数据可靠性深度解读【转】

    1 概述 Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cl ...

  5. 1.oracle中decode的一些巧妙用法

    1.符号函数sign在decode中的用法--比较大小 select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值sign()函数根据某个值是0 ...

  6. C# ActiveX 中static变量缓存的问题

    最近在忙活一个绘图程序,按照要求需要以ActiveX的方式发布在网站中,这个绘图程序的大概功能就是从数据库获取数据,成图.发布后用户反映,数据变化后,图形没有发生变化,好像有缓存,如果把浏览器全部关闭 ...

  7. 了解Hadoop

    Apache Hadoop 官网 Hadoop源码分析 参考1   参考2 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构. Hadoop 的框架最核心的设计就是:HDFS(H ...

  8. 【Linux学习】Linux文件系统6—文件目录权限设置

    Linux文件系统6-文件目录权限设置 1.       chmod操作权限设置 chomd是用来改变文件或目录权限的命令,但只有文件的属主和超级权限用户root才有这种权限.通过chmod来改变文件 ...

  9. 【Data structure & Algorithm】把二元查找树转变成排序的双向链表

    把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表,要求不能创建任何新节点,只调整指针指向. 比如将二元查找树 10 /       \ 6       ...

  10. 3-C++程序的结构1.2

    对象的生存周期 可以分为静态生存周期和动态生存周期 1.静态生存周期 如果对象的生存期与程序的运行期相同,我们称它具有静态生存期.在文件作用域中声明的对象都具有静态生存期的.如果要在函数的块中声明具有 ...