TypeScript基础入门1

安装TypeScript

使用命令 npm i typescript --save即可为当前目录安装typescript,但是typescript的tsc命令并不能直接运行typescript代码,它只是将ts代码编译成js代码,生成一个js文件,所以通常我们还会安装typescript的运行时ts-node:npm i -g ts-node.
注意:ts-node并不等于typescript的node.js,仅仅封装了typescript的编译过程,提供直接运行typescript的能力。

类型与函数

  • 基本类型
类型 示例
boolean let flag:boolean = true
number let a:number = 6;let b:number = 1_000_000
string let name:string = “hello world”
null let u: null = null,null是所有类型的子类型
undefined let u: undefined = undefined ,undefined是所有类型的子类型
数组 let list: number[] = [1, 2, 3]或者let list: Array = [1, 2, 3]
元组(Tuple) let x:[string,number] = [“hello”,1] //x[0]=>‘hello’;x[1]=>1
any let notSure: any = 4;notSure = “maybe a string instead”;
enum enum Color {Red, Green, Blue}let c: Color = Color.Green;或者enum Color {Red = 1, Green = 2, Blue = 4}let c: Color = Color.Green;let colorName:string=Color[0]//‘Red’
void let unusable: void = undefined;声明一个void类型的变量没有什么大用,因为只能为它赋予undefined和null
object object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。例如:declare function create(o: object | null): void;create({ prop: 0 }); // OK
symbol let sym2 = Symbol(“key”);let sym3 = Symbol(“key”);sym2 === sym3; // false, symbols是唯一的
  • 变量声明
    let和const是es6中新增的变量声明方式。在ts中,let和const的使用方式与es6中一模一样,推荐大家使用let和const进行赋值,使用var声明有时会有很多怪异的地方,详情可以参考ts官方文档。
//即便不指定类型,ts依旧可以根据指定的变量进行类型推断,如下所示:
    let name = `hello world`
    const age = 5
//如果在初始化阶段已经声明了该变量类型,在中途更改,会触发ts的编译时报错。
  • 类型断言
    有时我们会遇到另外一种情况,我们会比ts更了解这个值的类型,通过类型断言,可以明确地告知编译器,我们究竟想干什么。因此,类型断言常用来避开编译器的类型检查功能。
断言分为两种形式,第一种用“尖括号”:
let str:any="this is a string"
let strLength:number = (<string>str).length;

另外一种使用关键字as:
let str:any="this is a string"
let strLength:number = (str as string).length;
  • 泛型
function identity<T>(arg: T): T {
    return arg;
}

定义了泛型函数后,可以用两种方法使用。 

第一种是,传入所有的参数,包含类型参数:
let output = identity<string>("myString");  // type of output will be 'string'
这里我们明确的指定了T是string类型,并做为一个参数传给函数,使用了<>括起来而不是()。

第二种方法更普遍。利用了类型推论 -- 即编译器会根据传入的参数自动地帮助我们确定T的类型:
let output = identity("myString");  // type of output will be 'string'
  • 交叉类型和联合类型
基本类型是不会存在交叉的。比如number和string是不可能有交叉点的,一个类型不可能既是字符串又是数字。所以当我们使用交叉类型时通常时下面这样:
interface A {
    d:number,
    z:string
}

interface B {
    d:string,
    g:string
}
type C = A&B; 
let c:C
//使用交叉类型时,需要确保属性不会发生冲突,例如d既是number类型又是string类型,因此d时不能通过类型检查的。
interface A {
    d:string,
    z:string
}

interface B {
    d:string,
    g:string
}
//如果一个值是联合类型,我们只能访问它们共有的属性。

猜你喜欢

转载自blog.csdn.net/qq_36828822/article/details/106885192