Typescript 就是 Javascript 的超集,所以首先你要知道 Javascript 基础知识

类型注解

类型注解在TypeScript中是记录函数或变量约束的简便方法。

// 布尔值
let isDone: boolean = false; // 数字
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744; // 字符串
let name: string = 'bob';
// 模板字符串,可定义多行文本和内嵌表达式
let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }. I will be ${ age + 1 } years old nex month.`; // 字符串字面量类型
type EventNames = 'click' | 'scroll' | 'mouseove';
function handleEvent(ele: Element, event: EventNames) {
// do something
}
handleEvent(document.getElementById('hello'), 'scroll'); // ok
handleEvent(document.getElementById('world'), 'dbclick'); // 报错, event 不能为 'dbclick' // 数组
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3]; // person参数必须是string类型,且必须有参数
function greeter(person: string) {
return 'Hello, ' + person;
}
var user = [0, 1, 2];
document.body.innerHTML = greeter(user);
// 类型报错 // 枚举
enum Color { Red, Green, Blue };
let c: Color = Color.Green; // 1 // 手动赋值
enum Color { Red = 1, Green, Blue };
let c: Color = Color.Green; // 根据值得到名字
enum Color { Red = 1, Green, Blue };
let colorName: string = Color[2];
console.log(colorName); // Green // 手动赋值的枚举项可以不是数字,需要使用类型断言来让tsc无视类型检查
enum Days { Sun = 7, Mon, Tue, Wed, Thu, Fri, Sat = <any>'S' }; // 枚举会被编译为
var Days;
(function (Days) {
Days[Days['Sun'] = 0] = 'Sun';
Days[Days['Mon'] = 1] = 'Mon';
Days[Days['Tue'] = 2] = 'Tue';
Days[Days['Wed'] = 3] = 'Wed';
Days[Days['Thu'] = 4] = 'Thu';
Days[Days['Fri'] = 5] = 'Fri';
Days[Days['Sat'] = 6] = 'Sat';
})(Days || (Days = {})); // 任意值(任意类型)
let notSure: any = 4;
notSure = 'maybe a string instead';
notSure = false; // 与Object类型区别
let notSure: any = 4;
notSure.ifItExists();
notSure.toFixed(); let prettySure: Object = 4;
prettySure.toFixed(); // Error // 空值
function warnUser(): void {
alert("This is my warning message");
} // 声明一个void类型的变量,只能赋值为null或者undefined
let unusable: void = undefined; // Never
// never 类型表示的是那些永不存在的值的类型 // null 和 undefined 是所有类型的子类型。而 void 类型则不是。

元组 Tuple

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。


let x: [string, number];
x = ['hello', 10]; // ok
x = [10, 'hello']; // error
// 类型约束
console.log(x[0].substr(1)); // ok
console.log(x[1].substr(1)); // error, 'number' does not have 'substr'
// 访问越界的元素,会使用联合类型替代
x[3] = 'world'; // ok
console.log(x[5].toString()); // ok
x[6] = true; // error, 布尔不是(string | number)类型

类型断言

  • “尖括号”语法
let someValue:any = "this is a string";
let strLength: number = (<string>someValue).length;
  • as 语法
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length

类型别名

用来给一个类型起个新名字。类型别名常用于联合类型。

// 使用 type 创建类型别名
type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {
if ( typeof n === 'string' ) {
return n;
} else {
return n();
}
}

解构

  • 解构数组
let input = [1, 2];
let [first, second] = input;
console.log(first); // 1
console.log(second); // 2 let [first, ...rest] = [1, 2, 3, 4];
console.log(first); // 1
console.log(rest); // [2, 3, 4]
  • 对象解构
let o = {
a: 'foo',
b: 12,
c: 'bar'
};
let { a, b } = o; // 可以用没有声明的赋值,必需以括号括起来,否则{起始的语句会解析为一个块
({ a, b } = { a: 'baz', b: 101 }); // 使用...语法创建剩余变量
let { a, ...passthrough } = o;
let total = passthrough.b + passthrough.c.length; // 属性重命名
let { a: newName1, b: newName2 } = o;
// 相当于
let newName1 = o.a;
let newName2 = o.b; // 指示类型
let { a, b }: { a: string, b: number } = o; // 默认值,属性为undefined时使用缺省值
function keepWholeObject(wholeObject: { a: string, b?:number }) {
let { a, b = 1001 } = wholeObject;
} function f({ a, b = 0 } = { a: '' }): void {
//...
}
f({ a: 'yes' }); // ok
f(); // ok, default to {a: ''}
f({}); // error, 'a' is required if you supply an argument

展开

// 数组展开,展开操作是浅拷贝
let first = [1, 2];
let second = [3, 4];
let bothPlus = [0, ...first, ...second, 5]; // 展开对象
let defaults = { food: 'spicy', price: '$$', ambiance: 'noisy' };
let search = { ...defaults, food: 'rich' }; // 展开,只包含自身的可枚举的属性
class C {
p = 1;
m() { }
}
let c = new C();
let clone = { ...c };
clone.p; // ok
clone.m(); // error

class Student {
fullName: string;
// 构造函数
constructor(public firstName, public middleInitial, public lastName) {
this.fullName = firstName + ' ' + middleInitial + ' ' + lastName;
}
} interface Person {
firstName: string;
lastName: string;
} function greeter(person: Person) {
return 'Hello, ' + person.firstName + ' ' + person.lastName;
} var user = new Student('Jane', 'M', 'User');
document.body.innerHTML = greeter(user);

更详细的可以关注Typescript官网

Typescript 基础知识的更多相关文章

  1. TypeScript基础知识

    一. TypeScript是js的超集,可以应用所有js语法 二. 特点: 1. 优点 a. 可以在编译阶段就发现大部分错误,这总比在运行时候出错好 b. 同一目录下不同文件中,使用统一命名,会有命名 ...

  2. Angular 4 学习笔记 从入门到实战 打造在线竞拍网站 基础知识 快速入门 个人感悟

    最近搞到手了一部Angular4的视频教程,这几天正好有时间变学了一下,可以用来做一些前后端分离的网站,也可以直接去打包web app. 环境&版本信息声明 运行ng -v @angular/ ...

  3. CodeMix入门基础知识

    CodeMix在线订购年终抄底促销!火爆开抢>> CodeMix入门 CodeMix是一个Eclipse插件,可以直接从Eclipse访问VS Code和为Code OSS构建的附加扩展的 ...

  4. vue基础知识之vue-resource/axios

    Vue基础知识之vue-resource和axios(三)   vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没 ...

  5. Vue基础知识之vue-resource和axios

    Vue基础知识之vue-resource和axios  原文链接:http://www.cnblogs.com/Juphy/p/7073027.html vue-resource Vue.js是数据驱 ...

  6. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  7. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  8. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  9. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

随机推荐

  1. Java学习之路(十二):IO流

    IO流的概述及其分类 IO流用来处理设备之间的数据传输,Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流(读写数据)     输出流(写数据) 流按操作 ...

  2. TCP与UDP的差别以及TCP三次握手、四次挥手

    UDP: 1.UDP面向报文,无需建立连接,不可靠,数量小,高层就解决差错重传,无需拥塞控制 2.支持音频.视频传输 3.检查和检验UDP包头和数据和伪首部 4.分组开销小(头部8个字节),提供最大努 ...

  3. Python 基础语法——数字和表达式(包含数学上的一些函数)

    >>> 2+2 4 >>> 1/2 0 >>> 1.0/2.0 0.5 >>> 1/2.0 0.5 >>> 1 ...

  4. Fiddler Web Debugger的代理功能(图文详解)

    不多说,直接上干货! Fiddler的大部分功能都是在其作为本地代理的基础上实现的,如上面介绍的原理图一样,如果想实现数据包截断功能必须要设置为代理,它的代理功能设置比较简单,Fiddler版本2以后 ...

  5. 代码阅读——十个C开源项目

    1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连 ...

  6. ActiveMQ安全机制设置

    一.设置后台管理密码a.ActiveMQ使用的是jetty服务器,找到D:\div\apache-activemq-5.11.1\conf\jetty.xml文件: <bean id=" ...

  7. springcloud 熔断处理

    在springcloud微服务中,有时候一个服务挂了,我们需要友好的提示,此时我们在api网关路由上做一下过滤,进行友好的提示处理. 代码如下: import com.fasterxml.jackso ...

  8. 【LeetCode题解】142_环形链表2(Linked-List-Cycle-II)

    目录 描述 解法一:哈希表 思路 Java 实现 Python 实现 复杂度分析 解法二:双指针 思路 Java 实现 Python 实现 复杂度分析 描述 给定一个链表,返回链表开始入环的第一个节点 ...

  9. [codeup] 2044 神奇的口袋

    题目描述 有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40.John现在有n个想要得到的物品,每个物品的体积分别是a1,a2--an.John可以从这些物品中选 ...

  10. Hive是什么

    Hive是什么1)Hive 是建立在Hadoop (HDFS/MR)上的用于管理和查询结果化/非结构化的数据仓库:2)一种可以存储.查询和分析存储在Hadoop 中的大规模数据的机制:3)Hive 定 ...