诚意
诚意如你,当一诚的态度对待

导航

 

ts代码有类型校验,必须指定类型

一:JavaScript的基本类型

7种:(大小写敏感)

  boolean:  true  和false

  null

  undefined:变量未定义时的属性

  number

  string

  symbol:(es6新添加的),它的实例是唯一且不可改变的

 

二:TypeScript的基本类型

1:数据类型

 

数据类型关键字描述
任意类型 any

声明为 any 的变量可以赋予任意类型的值。

举例:

  var oBox:any = document.getElementById('box');
数据类型 number

双精度 64 位浮点值。它可以用来表示整数和分数。

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 arr: any[] = [1, 'gg'];
 
元组

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

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

枚举类型用于定义数值集合。(定义更多的其他非数值类型的数据)

定义:

  enum 枚举名称{

    标识符[=整型常数],

    .....

  }

举例:

  enum flag {success=1,error=0};

enum Color {Red, Green, Blue};
let c: Color = Color.Blue;
console.log(c);    // 输出 2,如果枚举类型没有赋值,那么输出的就是下标
void void

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

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

表示对象值缺失。

undefined undefined

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

举例:

 下面这样定义最好。 

let x: number | null | undefined;
x = 1; // 运行正确
x = undefined;    // 运行正确
x = null;    // 运行正确
never never

never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无线循环)

举例:

let x: never;

// 运行错误,数字类型不能转为 never 类型
x = 123;

 

  Object  

 Object是一种非numberstringbooleansymbolnull,或undefined的类型

举例:

declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK

create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Erro
r

 

2:类型断言(相当于转换数据类型)

类型断言有两种形式。 其一是“尖括号”语法:

var str = '1' 
var str2:number = <number> <any> str   //str、str2 是 string 类型
console.log(str2)

 

另一个为as语法:

let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;

两种形式是等价的。 至于使用哪个大多数情况下是凭个人喜好;然而,当你在TypeScript里使用JSX时,只有 as语法断言是被允许的。

 

 

三:变量声明

 

TypeScript 变量的命名规则:

  • 变量名称可以包含数字和字母。

  • 除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。

  • 变量名不能以数字开头。

变量使用前必须先声明,我们可以使用 var 来声明变量。

1:var

声明变量的类型及初始值:
var [变量名] : [类型] = 值;
例如:
var uname:string = "Runoob";
声明变量的类型及但没有初始值,变量值会设置为 undefined:
var [变量名] : [类型];
例如:
var uname:string;
声明变量并初始值,但不设置类型类型,该变量可以是任意类型:
var [变量名] = 值;
例如:
var uname = "Runoob";
声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined:
var [变量名];
例如:
var uname;

 

    // var 的变量提升的问题
    console.log(a);  //undefined     ##如何看是否是提升变量---》局部作用域前后打印看看
    {
        var a = 10;
    }
    console.log(a) //10

 

2:let  (es6新增)

let不存在变量提升,作用域是局部作用域

 

3:const 声明(es6新增)

const 声明是声明变量的另一种方式。

它们与let声明相似,但是就像它的名字所表达的,它们被赋值后不能再改变。 换句话说,它们拥有与 let相同的作用域规则,但是不能对它们重新赋值。

这很好理解,它们引用的值是不可变的

const numLivesForCat = 9;
const kitty = {
    name: "Aurora",
    numLives: numLivesForCat,
}

// Error
kitty = {
    name: "Danielle",
    numLives: numLivesForCat
};

// all "okay"
kitty.name = "Rory";
kitty.name = "Kitty";
kitty.name = "Cat";
kitty.numLives--;

除非你使用特殊的方法去避免,实际上const变量的内部状态是可修改的。 幸运的是,TypeScript允许你将对象的成员设置成只读的。

 

四:泛型

1:泛型函数---泛型的作用

当我们需要给一个函数传入一个数字时(需要参数和返回值是同一类型),

function hello(arg: number): number {
    return arg;
}

 

当我们需要给一个函数传入一个字符串时,

function hello(arg: string): string {
    return arg;
}

 

这样是不是很麻烦呢?看下面写法:

function hello(arg: any): any {
    return arg;
}

 

这样写的缺点:any类型不能明确地表达参数与返回值必须是相同类型。因此泛型是能明确控制参数、返回值数据类型相同的方式

泛型如下写法:

function hello<T>(arg: T): T {
    return arg;
}

 

2:泛型变量

为什么上面的变量会报错呢?因为   T   只是捕捉传入的数据类型,并不能确定数据是number  还是  string还是什么。

 

像泛型数组就没有问题了

五:枚举

 为什么会有枚举呢?举个例子:后端开发约定订单的开始是0,未结账是1,运输中是2,运输完成是3,已收货是4.这样的纯数字会使得代码缺乏可读性。枚举就用于此场景。

1:数字枚举

enum OrderStatus {
    Start = 1,
    Unpaid,
    Shipping,
    Shipped,
    Complete,
}

就像上面我们就可以直接通过 OrderStatus.Start来代替原来的数字1,这样使得代码具备了可读性。

(上面Start = 1时,后面的枚举变量就是递增的)

enum OrderStatus {
    Start,
    Unpaid,
    Shipping,
    Shipped,
    Complete,
}

 

 (上面Start就是0,后面的枚举变量就是递增的。我们虽然不在意后面的这些值,但这些值必须是确定的。)

2:字符串枚举

enum OrderStatus {
    Start = 'Start',
    Unpaid = 'Unpaid',
    Shipping = 'Shipping',
    Shipped= 'Shipped',
    Complete = 'Complete',
}

这样的可读性是不是更高了呢。  

 

六:symbol

 自es6起,symbol 是类似于number、string的基本类型。

symbol的特点:symbol是唯一的,即使是使用同样的方式生成的两个symbol

 

 

七:iterator 和 generator

 

 

 

 

 

 

 

 

 

 




 

posted on 2019-05-04 12:33  诚意  阅读(657)  评论(0)    收藏  举报