JavaScript中所有事物(字符串、数值、数组、函数)都是对象,都有属性和方法。1、用函数定义对象,然后new对象实例。2、用Object定义并创建对象实例var o = new Object(true);

类其实是function:function带同名构造函数和return对象。

prototype给对象添加属性或方法

1、基础类型

数据类型 关键字 描述
任意类型 any 声明为 any 的变量可以赋予任意类型的值。
数字类型 number

它可以用来表示整数和分数。

let binaryLiteral: number = 0b1010; // 二进制
let octalLiteral: number = 0o744; // 八进制
let decLiteral: number = 6; // 十进制
let hexLiteral: number = 0xf00d; // 十六进制
字符串类型 string

一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式。

let name: string = "Runoob";
let years: number = 5;
let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`;
布尔类型 boolean

表示逻辑值:true 和 false。

let flag: boolean = true;
数组类型

声明变量为数组。

// 在元素类型后面加上[]
let arr: number[] = [1, 2]; // 或者使用数组泛型
let arr: Array<number> = [1, 2];
元组

元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。

let x: [string, number];
x = ['Runoob', 1]; // 运行正常
x = [1, 'Runoob']; // 报错
console.log(x[0]); // 输出 Runoob
枚举 enum

枚举类型用于定义数值集合。

enum Days {Sun, Mon, Tue, Wed, Thu, Fri, Sat};

console.log(Days["Sun"] === 0); // true
console.log(Days["Mon"] === 1); // true
console.log(Days["Tue"] === 2); // true
console.log(Days["Sat"] === 6); // true console.log(Days[0] === "Sun"); // true
console.log(Days[1] === "Mon"); // true
console.log(Days[2] === "Tue"); // true
console.log(Days[6] === "Sat"); // true
 
void void

用于标识方法返回值的类型,表示该方法没有返回值。

function hello(): void {
alert("Hello Runoob");
}
null null

表示对象值缺失。

undefined undefined

用于初始化变量为一个未定义的值

never never

never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。

注意:TypeScript 和 JavaScript 没有整数类型。

any:类型免于检查,一路绿灯
unknown:使用之前要类型检查,
never:throw new Error('Unable to greet');

2、类型推断
(1)、变量声明时没有类型但是有赋值,TypeScript 编译器利用类型推断来推断类型

let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

--该段代码报错了

(2)、变量声明时没有类型且没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查:

let myFavoriteNumber;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

--该段代码不会报错。

3、类型强制转换(类型断言)

var str2:number = <number> '1'
var str2:number = '1' as number,//通常我们使用as的方法

类型断言其他用法:1、将一个联合类型断言为其中一个类型 2、将一个父类断言为更加具体的子类  3、将任何一个类型断言为any 4、将any断言为其他类型

变量作用域:全局作用域、类作用域、局部作用域

let局部变量,常量const,全局变量var

4、运算符

短路运算符(&& 与 ||):&&第一个参数是false就直接返回false,第二个不会执行;||第一个参数是true就直接返回true第2个不会执行。
typeof 返回操作数的数据类型。
instanceof 运算符用于判断对象是否为指定的类型

判断类型方法:if(typeof person === 'string'), if(Array.isArray(person)),if(obj instanceof Person)

5、函数

在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型

函数定义的2种方式:函数声明、函数表达式

// 函数声明(Function Declaration)
function sum(x, y) {
return x + y;
} // 函数表达式(Function Expression)----匿名函数
let mySum = function (x, y) {
return x + y;
};

可选参数:放最后,用文号标识。lastName?:string

默认参数:lastName:string='a'
剩余参数:不知道要传多少个参数,将一个不确定数量的参数作为一个数组传入。...nums:number[]
#匿名函数:将函数赋值给一个变量。var res = function( [arguments] ) { ... }用res来调用函数
匿名函数自调用:匿名函数自调用在函数后使用 ()。(function( [arguments] ) { ... })()
#Lambda 函数:箭头函数。var foo = (x:number)=>{10 + x} 等价于function foo(x:number){return 10+x}

6、其他基础类型

数字::var num =1;

字符串:var txt = "string";

数组:var numlist:number[] = [2,4,6,8]

多维数组:var multi:number[][] = [[1,2,3],[23,24,25]]

解构赋值:将数组或对象赋值给变量。let [a, b, c] = foo();let {x: x, y: y, z: z} = bar();

循环

for()
for…of 遍历数组、字符串、Maps、Sets。用来替代for...in和forEach
every 和 some 取代 forEach,forEach无返回
while
do...while

7、元祖

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

const studentInfo: [string, string, number] = ["Jack", "Tom", 123];

const studentList: [string, string, number][] = [
["Tom1", "Jack1", 21],
["Tom2", "Jack2", 22],
["Tom3", "Jack3", 23],
];

push() 向元组添加元素,添加在最后面。

pop() 从元组中移除元素(最后一个),并返回移除的元素。

8、联合类型

通过管道(|)将变量设置多种类型。var val:string|number=12
联合类型数组:var arr:number[]|string[];

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
console.log(myFavoriteNumber.length); // 5
myFavoriteNumber = 7;
console.log(myFavoriteNumber.length); // 编译时报错

联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型

9、接口

接口:作用1、作为类的抽象,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。作用2、定义对象的类型

用接口定义对象类型

interface Person {
name: string;
age: number;
} let tom: Person = {
name: 'Tom',
age: 25
};

用接口定义函数:给接口定义一个调用签名。 它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型。

interface SearchFunc {
(source: string, subString: string): boolean;
} let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
return source.search(subString) !== -1;
}

用接口定义数组:--其实是任意属性的扩展:任意属性+属性键是number的

interface StringArray {
[prop: number]: string;
} let myArray: StringArray;
myArray = ["Bob", "Fred"]; let myStr: string = myArray[0];

虽然接口也可以用来描述数组,但是我们一般不会这么做,因为这种方式比常规方式复杂多了

接口的可选属性

interface Person {
name: string;
age?: number;
} let tom: Person = {
name: 'Tom'
};

接口的任意属性--表示属性可以任意名字+任何数量

interface A {
[prop: string]: number;
} const obj: A = {
a: 1,
b: 3,
};

[prop: string]: number 的意思是,A 类型的对象可以有任意属性,string 指的是属性的键都是字符串类型的,number 则是指定了属性值的类型。

interface Person {
name: string;
age?: number;
[prop: string]: string;
}//报错了

一旦定义了任意属性,那么其他属性的类型都必须是该任意属性的类型的子集:

一个接口中只能定义一个任意属性

只读属性readonly

interface Person {
readonly id: number;
name: string;
age?: number;
[propName: string]: any;
} let tom: Person = {
id: 89757,
name: 'Tom',
gender: 'male'
}; tom.id = 9527;//这一行报错了

对象中的只读属性只能在创建的时候被赋值,之后不能再次赋值

10、类、对象、命名空间

接口:继承关键字:extends,接口可继承多个接口

类构成

使用 class 定义类,使用 constructor 定义构造函数。

通过 new 生成新实例的时候,会自动调用构造函数。

class Animal {
public name;
constructor(name) {
this.name = name;
}
sayHi() {
return `My name is ${this.name}`;
}
} let a = new Animal('Jack');
console.log(a.sayHi()); // My name is Jack

存取器

使用 getter 和 setter 可以改变属性的赋值和读取行为:

class Animal {
constructor(name) {
this.name = name;
}
get name() {
return 'Jack';
}
set name(value) {
console.log('setter: ' + value);
}
} let a = new Animal('Kitty'); // setter: Kitty
a.name = 'Tom'; // setter: Tom
console.log(a.name); // Jack

abstract 用于定义抽象类和其中的抽象方法。

extends继承:1次只能继承一个类,不能继承多个类。用super引用父类属性和方法。方法重写。static

访问控制修饰符:public,protected,private
类可以实现接口,使用关键字 implements,
多态:
命名空间:引入命名空间文件/// <reference path = "SomeFileName.ts" />

11、用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();
}
}

类型别名常用于联合类型。

12、用type--定义字符串字面量类型

type EventNames = 'click' | 'scroll' | 'mousemove';
function handleEvent(ele: Element, event: EventNames) {
// do something
} handleEvent(document.getElementById('hello'), 'scroll'); // 没问题
handleEvent(document.getElementById('world'), 'dblclick'); // 报错,event 不能为 'dblclick'

上例中,我们使用 type 定了一个字符串字面量类型 EventNames它只能取三种字符串中的一种

13、泛型<T>

指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。

function createArray<T>(length: number, value: T): Array<T> {
let result: T[] = [];
for (let i = 0; i < length; i++) {
result[i] = value;
}
return result;
} createArray<string>(3, 'x'); // ['x', 'x', 'x'](这里也可以不手动指定,而让类型推论自动推算出来)

上例中,我们在函数名后添加了 <T>,其中 T 用来指代任意输入的类型,在后面的输入 value: T 和输出 Array<T> 中即可使用了

多个泛型参数

function swap<T, U>(tuple: [T, U]): [U, T] {
return [tuple[1], tuple[0]];
} swap([7, 'seven']); // ['seven', 7]

14、声明合并

函数声明合并:多个函数声明+1个函数实现

接口声明合并:多个接口声明+1个接口实现

类的声明合并:多个类声明+1个类实现

合并规则:属性合并。属性同名必须同类型,否则报错。

function reverse(x: number): number;
function reverse(x: string): string;
function reverse(x: number | string): number | string {
if (typeof x === 'number') {
return Number(x.toString().split('').reverse().join(''));
} else if (typeof x === 'string') {
return x.split('').reverse().join('');
}
}

15、声明文件

用来引入第三方js库。以 .d.ts 为后缀。引入申明文件格式:/// <reference path = " runoob.d.ts" />

typescript基础知识汇总的更多相关文章

  1. jquery基础知识汇总

    jquery基础知识汇总 一.简介 定义 jQuery创始人是美国John Resig,是优秀的Javascript框架: jQuery是一个轻量级.快速简洁的javaScript库.源码戳这 jQu ...

  2. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  3. Golang 入门系列(三)Go语言基础知识汇总

    前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...

  4. Typescript 基础知识

    Typescript 就是 Javascript 的超集,所以首先你要知道 Javascript 基础知识 类型注解 类型注解在TypeScript中是记录函数或变量约束的简便方法. // 布尔值 l ...

  5. Oracle基础知识汇总一

    Oracle基础知识 以下内容为本人的学习笔记,如需要转载,请声明原文链接   https://www.cnblogs.com/lyh1024/p/16720759.html oracle工具: SQ ...

  6. C#基础知识汇总(不断更新中)

    ------------------------------目录---------------------------- 1.隐式类型2.匿名类型3.自动属性4.初始化器5.委托6.泛型7.泛型委托8 ...

  7. HTML基础知识汇总

    前言 一直想总结一下,苦于没有时间,正好看到了一个总结了不错的博客,我就在他的基础上进行一下测试并总结,原博地址:http://www.cnblogs.com/wanghzh/p/5805587.ht ...

  8. C#基础知识汇总

    过了一遍基础视频,发现有一些最基本的知识点还掌握的不够,汇总如下: 1) 占位符 string name = "张三"; ; decimal salary = 7600.33M; ...

  9. 5、Makefile基础知识汇总(转自陈皓总述)

    一.Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释. 1.显式规则.显式规则说明了,如何生成一个或多的的目标文件.这是由Makefile ...

  10. CSS基础知识汇总

    前言 原文连接:http://www.cnblogs.com/wanghzh/p/5805678.html 在此基础上又做了大量的扩充 CSS简介 CSS是Cascading Style Sheets ...

随机推荐

  1. C++ 自动计时

    #include<iostream> #include<chrono> struct Timer { std::chrono::time_point<std::chron ...

  2. 手写数字图片识别——DL 入门案例

    Deep Learning Demo of Primary 下面介绍一个入门案例,如何使用TensorFlow和Keras构建一个CNN模型进行手写数字识别,以及如何使用该模型对自己的图像进行预测.尽 ...

  3. #排列组合#CF1550D Excellent Arrays

    洛谷传送门 CF1550D 分析 对于excellent的 \(a\) 来说 \(|a_i-i|=x\) 的值是固定的,考虑枚举它 一半正一半负时函数值是最大的,当 \(n\) 为奇数时要分为两种情况 ...

  4. #主席树,dsu on tree,树上倍增#洛谷 3302 [SDOI2013]森林

    题目 分析 第\(k\)大的问题可以用主席树解决, 下标为节点离散化后的权值, 连边操作考虑合并两棵树, 如果暴力合并那肯定会T飞,考虑启发式合并 同时维护子树内的lca,方便主席树的查询 代码 #i ...

  5. SkipList和java中ConcurrentSkipListMap的实现

    目录 简介 SkipList ConcurrentSkipListMap SkipList的实现 concurrent的实现 总结 SkipList和java中ConcurrentSkipListMa ...

  6. 本周二晚19:00战码先锋第8期直播丨如何多方位参与OpenHarmony开源贡献

    OpenAtom OpenHarmony(以下简称"OpenHarmony")工作委员会首度发起「OpenHarmony开源贡献者计划」,旨在鼓励开发者参与OpenHarmony开 ...

  7. OpenHarmony littlefs文件系统存储结构与IO性能优化分析

    引言 随着科技的发展和网络技术的进步,计算机存储空间愈加紧张,存储空间对文件系统的功能需求越来越大,大规模的数据增长为文件存储.非结构化数据存储提出了新的挑战. 对于许多物联网设备而言,拥有一个小型且 ...

  8. 如何跑各种check

    如何进行 Fastcheck? 首先,导入环境变量: export CODE_BASE=/data/openGauss-server export BINARYLIBS=/data/openGauss ...

  9. Linux之识别HBA的WWN

    一.概念 FC HBA,也即Fibre Channel Host Bus Adapter,光纤通道主机适配器,简称光纤适配器. 在FC网络环境中,主机需要和FC网络.FC存储设备(SAN磁盘阵列)连接 ...

  10. 搞定了 6 种分布式ID,分库分表哪个适合做主键?

    大家好,我是小富- 本文是<ShardingSphere5.x分库分表原理与实战>系列的第七篇,目前系列的前几篇制作成了PDF,需要的可以在文末获取下载方式,持续更新中.今天咱们继续一起来 ...