TypeScript Handbook(中文版)
编译代码 我们使用了 .ts 扩展名,但是这段代码仅仅是JavaScript而已。 你可以直接从现 有的JavaScript应用里复制/粘贴这段代码。 在命令行上,运行TypeScript编译器: tsc greeter.ts TypeScript Handbook(中文版) 9 5分钟了解TypeScript 输出结果为一个 greeter.js 文件,它包含了和输入文件中相同的JavsScript代 HTMLInputElement).value; return `Hello from ${compiler} and ${framework}!`; } 构建设置 配置 TypeScript 编译器 我们先来告诉TypeScript怎样构建。 右击scripts文件夹并选择New Item。 接着选 择TypeScript Configuration File,保持文件的默认名字为 tsconfig cd proj 我们将以下面的结构开始我们的工程: proj/ ├─ src/ └─ dist/ TypeScript文件放在 src 文件夹下,经过TypeScript编译器编译生成的目标文件放 在 dist 目录下。 下面让我们来创建这些文件夹: mkdir src mkdir dist 初始化工程 现在让我们把这个文件夹转换成npm包: npm init0 码力 | 557 页 | 7.48 MB | 1 年前3TypeScript 4.0 使用手册
greeter(user); 我们使用了 .ts 扩展名,但是这段代码仅仅是JavaScript而已。 你可以直接从现有的 JavaScript应用里复制/粘贴这段代码。 在命令行上,运行TypeScript编译器: 1. tsc greeter.ts 5分钟了解TypeScript 安装TypeScript 构建你的第一个TypeScript文件 编译代码 5分钟了解TypeScript - 17 /app.ts" 10. ], 11. "compileOnSave": true 12. } 添加 TypeScript 代码 添加示例代码 构建设置 配置 TypeScript 编译器 ASP.NET Core - 23 - 本文档使用 书栈网 · BookStack.CN 构建 看起来和默认的设置差不多,但注意以下不同之处: 1. 设置 "noImplicitAny": 我们将以下面的结构开始我们的工程: 1. proj/ 2. ├─ src/ 3. └─ dist/ TypeScript文件放在 src 文件夹下,经过TypeScript编译器编译生成的目标文件放在 dist 目 录下。 下面让我们来创建这些文件夹: 1. mkdir src 2. mkdir dist 现在让我们把这个文件夹转换成npm包: 1. npm init0 码力 | 683 页 | 6.27 MB | 1 年前3Programming TypeScript
许可协议:署名-相同方式共享 4.0 国际 (CC BY-SA 4.0) TypeScript 概述 编译器 编写的代码(文本) 由 一个特殊的程序(编译器)解析,转换成抽象句法树(abstract syntax tree, AS ). AST 是去掉了空白、注释和缩进用的制表符或空格之后的数据结构。 编译器把 AST 转换成一种字节码(bytecode) 的低(底?)层表示。 字节码再传给运行时程序计算,最终得到结果。 TS TS 编译成 JS 时,不会考 类型。 这意味着,程序中的类型对程序生成的输出没有任何影响,类型只在类型检查这一步使用。 类型系统 ● 一般的有两种类型系统 1. 通过显示句法告诉编译器所有值的类型(注解) 2. 自动推导类型 ● TS 身兼两种类型系统 // 建议 原文链接:Programming TypeScript 一般来说,最好让TS 推导类型,少数情况下才显式注解类型。(Why0 码力 | 3 页 | 202.08 KB | 1 年前3TypeScript 类型系统
boolean / string / array+常见基础控制语句 状态:开发中 我目前的研究方向 24 目标:基于静态分析寻找脆弱的Node.js代码 需要做的: 1. 改造TypeScript编译器 2. 搭建TypeScript静态分析框架 3. 设计实现基于静态污点分析的漏洞检测技术 4. 设计实现面向Node.js应用的安全测试框架 Q & A0 码力 | 25 页 | 1.27 MB | 1 年前3Hello 算法 1.1.0 TypeScript版
24 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 第 2 章 复杂度分析 hello‑algo.com 25 图 2‑5 尾递归过程 Tip 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即 使函数是尾递归形式,仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的思 间效率是否有影响? 存储在栈上和堆上的数组都被存储在连续内存空间内,数据操作效率基本一致。然而,栈和堆具有各自的特 点,从而导致以下不同点。 1. 分配和释放效率:栈是一块较小的内存,分配由编译器自动完成;而堆内存相对更大,可以在代码中动 态分配,更容易碎片化。因此,堆上的分配和释放操作通常比栈上的慢。 2. 大小限制:栈内存相对较小,堆的大小一般受限于可用内存。因此堆更加适合存储大型数组。0 码力 | 383 页 | 18.49 MB | 1 年前3Hello 算法 1.0.0b5 TypeScript 版
23 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出报错。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 第 2 章 复杂度分析 hello‑algo.com 24 图 2‑5 尾递归过程 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即使函数 是尾递归形式,但仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的 但可能导致部分内存空间浪费。 第 4 章 数组与链表 hello‑algo.com 80 2. Q & A � 数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响? 栈内存分配由编译器自动完成,而堆内存由程序员在代码中分配(注意,这里的栈和堆和数据 结构中的栈和堆不是同一概念)。 1. 栈不灵活,分配的内存大小不可更改;堆相对灵活,可以动态分配内存。 2. 栈是一块比较小的0 码力 | 378 页 | 30.70 MB | 1 年前3Hello 算法 1.2.0 简体中文 TypeScript 版
24 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 第 2 章 复杂度分析 www.hello‑algo.com 25 图 2‑5 尾递归过程 Tip 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即 使函数是尾递归形式,仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的思 间效率是否有影响? 存储在栈上和堆上的数组都被存储在连续内存空间内,数据操作效率基本一致。然而,栈和堆具有各自的特 点,从而导致以下不同点。 1. 分配和释放效率:栈是一块较小的内存,分配由编译器自动完成;而堆内存相对更大,可以在代码中动 态分配,更容易碎片化。因此,堆上的分配和释放操作通常比栈上的慢。 2. 大小限制:栈内存相对较小,堆的大小一般受限于可用内存。因此堆更加适合存储大型数组。0 码力 | 383 页 | 18.49 MB | 10 月前3
共 7 条
- 1