TypeScript----基础类型

目录

前言

一、基本类型(I)

1、布尔类型

2、数字类型

3、字符串类型

4、数组类型

5、元组类型

6、枚举类型

二、基本类型(II)

1、任意类型

         2、Void类型

3、Null 和 Undefined类型

4、Never类型

5、Object类型

三、类的断言


前言

TypeScript 是一种强类型编程语言,它建立在 JavaScript 的基础上,可以在任何规模上提供更好的工具。TypeScript代码转换成 JavaScript,JavaScript 可以在 JavaScript 运行的任何地方运行: 在浏览器中,在 Node.js 或 Deno 上,在你的应用程序中。

一、基本类型(I)

1、布尔类型

在JavaScript和TypeScript里也是boolean,只有简单的true和false。

let isNot: boolean = false;

2、数字类型

TypeScript里的所有数字都是浮点数,类型是number,与JavaScript也是一样的,有很多地方和JavaScript有异曲同工在之妙,接下来的文章将偶尔提及不同之处。

TypeScript支持二、八、十、十六进制的整数和分数。

let binaryLiteral: number = 0b1010; // 二进制
let octalLiteral: number = 0o744;    // 八进制
let decLiteral: number = 6;    // 十进制
let hexLiteral: number = 0xf00d;    // 十六进制

3、字符串类型

TypeScript使用双引号(" ")或者单引号(' ')表示字符串string

let name: string = "TypeScript";
name = "JavaScript";

还可以使用模版字符串,它可以定义多行文本和内嵌表达式。 这种字符串是被反引号包围( `),并且以${ expr }这种形式嵌入表达式。

let name: string = `Gene`;
let age: number = 37;
//第一种
let sentence: string = `Hello, my name is ${ name }.

I'll be ${ age + 1 } years old next month.`;
//第二种
let sentence: string = "Hello, my name is " + name + ".\n\n" +
    "I'll be " + (age + 1) + " years old next month.";

4、数组类型

有两种方式可以定义数组Array

第一种,可以在元素类型后面接上 [],表示由此类型元素组成的一个数组:

let list: number[] = [1, 2, 3];

第二种方式是使用数组泛型,Array<元素类型>

let list: Array<number> = [1, 2, 3];

5、元组类型

元组tuple类型允许表示一个已知元素数量和类型的数组,各个元素的类型可以不相同,对应位置的类型需要相同,比如你可以定义一对值分别为string和number的类型的元组。

let x: [string, number];
x = ['hello', 10]; // 运行正常
x = [10, 'hello']; // 运行报错

当访问一个已知索引的元素,会得到正确的类型:

console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'

当访问一个越界的元素,会使用联合类型替代:

x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型

console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString

x[6] = true; // Error, 布尔不是(string | number)类型

6、枚举类型

enum类型是对JavaScript标准数据类型的一个补充,使用它可以为一组数值赋予友好的名字。

enum Color {Red, Green, Blue}
let c: Color = Color.Green;

默认情况下,从0开始为元素编号,你也可以手动的指定成员的数值。例如我们将上面的例子从1开始编号:

enum Color {Red=1,Green,Blue}
let c: Color = Color.Green;

或者采用手动赋值:

enum Color {Red = 1, Green = 2, Blue= 4}
let c: Color = Color.Green;

枚举类型提供的一个便利是你可以由枚举值得到它的名字,为我们查找提供方便:

enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];

console.log(colorName);  // 显示'Green'因为上面代码里它的值是2

二、基本类型(II)

1、任意类型

有些时候我们编程的时候还不确定指定什么类型,也许是一个动态的值,可变类型等等,这时候我们便出现了任意类型--any 用来标记这些变量。

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

对现有的代码改写的时候,any类型是十分有用的,他允许你在编译的时候可选择的包含或者移除类型检查。

Any与Object区别:Object类型的变量只允许你给它赋任意值,但是不能够在它上面调用任意的方法,即使它真的有这些方法:

let isAny: any = 4;
isAny.ifItExists(); // ok, ifItExists可能在运行时存在
isAny.toFixed(); // ok, toFixed存在(但编译器不检查)

let isObject: Object = 4;
isObject.toFixed(); // 错误:类型“Object”上不存在属性“toFixed”。

当你只知道一部分数据的类型时,any类型也是有用的。 比如,你有一个数组,它包含了不同的类型的数据:

let list: any[] = [1, true, "free"];
list[1] = 100;

2、Void类型

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

function warnUser(): void {
    console.log("This is my warning message");
}

声明一个void类型的变量没有什么大用,因为你只能为它赋予undefinednull

let unusable: void = undefined;

3、Null 和 Undefined类型

TypeScript中的这两种类型也没什么很大的用处,null表示对象值缺失,undefined用于初始化变量为一个未定义的值。

默认情况下,像 null 和 undefined 这样的值可以分配给任何其他类型。这样可以使编写代码更加容易,但是忘记处理 null 和未定义的代码会导致世界上无数的 bug ——有些人认为这是一个十亿美元的错误!Stricttnullchecks 标志使处理 null 和 undefined 变得更加明确,使我们不必担心是否忘记处理 null 和 undefined。

关闭 strictnullcheck 后,仍然可以正常访问可能为 null 或未定义的值,null 和未定义的值可以分配给任何类型的属性。这类似于没有空检查的语言(例如 c # 、 Java)的行为。缺乏对这些值的检查往往是 bug 的一个主要来源;

使用 strictNullChecks,当一个值为空或未定义时,您需要在对该值使用方法或属性之前测试这些值。就像在使用可选属性之前检查未定义的值一样,我们可以使用收缩来检查可能为 null 的值:

function doSomething(x: string | null) {
  if (x === null) {
    // do nothing
  } else {
    console.log("Hello, " + x.toUpperCase());
  }
}

 当我们知道值不能为空的时候,它就很重要了。

function liveDangerously(x?: number | null) {
  // No error
  console.log(x!.toFixed());
}

4、Never类型

never类型表示的是那些永不存在的值的类型。例如,never类型是那些总是会抛出异常货根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型;变量也可能是never类型,当他们被永不为真的类型保护所约束时。

never类型任何类型的子类型,也可以赋值给任何类型;

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
    return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
    while (true) {
    }
}

5、Object类型

object表示非原始类型,也就是除numberstringbooleansymbolnullundefined之外的类型。

使用object类型,就可以更好的表示像Object.create这样的API。例如:

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); // Error

三、类的断言

类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。 TypeScript会假设你,程序员,已经进行了必须的检查。

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

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;

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小先生

知识是无价的,白嫖也可以的。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值