TS小学习

268 阅读2分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

ts

基础用法

let a:number = 123
let b:string = 'a'
let c:boolean = true
let d:undefined = undefined 

字面量

let c: boolean | string;
c = true;
c = "aa";
let c: "male" | "female";
c = "male";
c = "female";

使用any后 ts不检测变量,和使用js没有区别;他可以赋值给任何类型变量

unknown,类型不相同,在赋值后会报错

object

基础用法

let a: { name: string };
a = { name: "aa" };

可选类型

let a: { name: string; age?: number };
a = { name: "aa", age: 18 };

除必选属性外可随意添加固定类型的属性

let d: { name: string; [propsName: string]: any };
d = { name: "aa", bc: 12 };

array

string[]表示字符串数组

let e: string[];
e = ["a", "b"];

或使用

let e = Array<number>

元祖=》固定长度的数组

let f: [string,string]
b = ['a','b']

enum枚举,列举所有可能

enum Gender {
	male = 1,
	famale = 0,
}
let i: { name: string; gender: Gender } = { name: "aa", gender: Gender.famale };

类和对象

在类和对象中,我们可以对其进行拆分分模块的进行类型注解,可以采用以下的形式export导出的一个类,来对LabelledValue中的a进行注解

export class aobj ={
  a:string;
  b:number;
}
interface LabelledValue {
  label: string;
  a:a obj;
}

一般在项目中,会使用d.ts文件类对接口等进行类型约束,多是采用上面这种接口的形式

泛型

普通使用

function f1<T, K>(number: T, str: K): T {
    console.log(str)
    return number
}

f1<number, string>(10, 'a')

指定具有特定方法

interface Inter {
    length: number
}
//泛型T必须是Inter的一个实现类
function f2<T extends Inter>(a: T): number {
    return a.length
}
f2('bbbb')

泛型,可以理解为一个变量,比如我们传入的是T变量类型,想让输出的也是T变量类型,但是传入的不一定是number,string的固定类型,这时候就适合用泛型。

编译选项(部分)

tsconfig.json

include
{
 "include":[
   "./src/**/*"
 ]
}

表示包含目录=>当前目录下的src文件夹下的任意目录的任意文件都要被编译

exclude
{
  "include":[
   "./src/a/b"  
  ]
}

表示忽略某个文件

files
{
  "files":[
   "./src/a/b"  
  ]
}

指定需要包含的文件