TypeScript基础一(安装 TypeScript,原始数据类型,任意值,类型推论)

安装 TypeScript

执行命令行

npm install -g typescript

会在全局环境下安装 tsc 命令,安装完成之后,我们就可以在任何地方执行 tsc 命令了。
编译一个 TypeScript 文件很简单:

tsc hello.ts

我们约定使用 TypeScript 编写的文件以 .ts 为后缀,用 TypeScript 编写 React 时,以 .tsx 为后缀。

原始数据类型

JavaScript 的类型分为两种:原始数据类型(Primitive data types)和对象类型(Object types)。
原始数据类型包括:布尔值、数值、字符串、nullundefined 以及 ES6 中的新类型 Symbol
本节主要介绍前五种原始数据类型在 TypeScript 中的应用。

  • 布尔值

let isDone: boolean = false;
  • 数值

let decLiteral: number = 6;
  • 字符串

let myName: string = 'Tom';
// 模板字符串
let sentence: string = `Hello, my name is ${myName}.
I'll be ${myAge + 1} years old next month.`;
  • Null 和 Undefined

let u: undefined = undefined;
let n: null = null;

tips:undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 其他 类型的变量,例如赋值给number类型的变量:

// 这样不会报错
let num: number = undefined;
// 这样也不会报错
let u: undefined;
let num: number = u;
  • 空值

JavaScript 没有空值(Void)的概念,在 TypeScript 中,我们用 void 表示没有任何返回值的函数:

function alertName(): void {
    alert('My name is Tom');
}

任意值

字面意思就是允许赋值为所有类型,包括简单数据类型和复杂数据类型。
对于普通数据类型,在赋值过程中是不可以改变类型的,否则会报错:

let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;

// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.

但如果是any类型,赋值过程中改变类型是允许的:

let myFavoriteNumber: any = 'seven';
myFavoriteNumber = 7;

因为是any类型,可以是数组,可以是对象,所以

  • 在任意值上访问任何属性都是允许的
let anyThing: any = 'hello';
console.log(anyThing.myName);
console.log(anyThing.myName.firstName);
  • 也允许调用任何方法:
let anyThing: any = 'Tom';
anyThing.setName('Jerry');
anyThing.setName('Jerry').sayHello();
anyThing.myName.setFirstName('Cat');

可以认为,声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值。

类型推论

如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型

在ts中,以下代码虽然没有指定类型,但是会在编译的时候报错:

let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.

事实上,它等价于:

let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;

TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论。

如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查,不会报错
let myFavoriteNumber;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

tips:注意变量被推导成any类型的关键点,在于我们定义一个变量之后,有没有立即赋值。定义之后没有赋值,以后就会定义为any类型,如果定义之后,第一次赋值是string,就会推导为string类型。

参考

TypeScript 入门教程

你可能感兴趣的:(TypeScript基础一(安装 TypeScript,原始数据类型,任意值,类型推论))