这是我参与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"
]
}
指定需要包含的文件