TS 学习

125 阅读2分钟

类型声明

  • 数组
** 数组**
// string[]  表示字符串数组
let a:string[];
a = ['a','b']
// Array<类型>
let b:Array<number>
b = [1,2,3]

  • 元组
/*
*元组,元组就是固定长度的数组
*/
let a :[string,number]
a = ['a',123]
  • 枚举
/*
* enum 枚举
*/
enum Gender{
    Male = 0,
    Female = 1
 
}
let i :{name:string,age:nummber,gender:Gender} 
i = {
    name:'test'
    age:12,
    gender :Gender.Male
}
// 联合类型
let test:string | number
test = 'tom'
test = 2

接口

使用接口(Interfaces)定义对象的类型

/*第一种
// 接口一般首字母大写
interface Person{
   name:string;
   age:number
}
// 赋值的时候,变量的形状必须和接口的形状保持一致。不能多,也不能少
let test:Person= {
   name:'Tom',
   age:2
}

/* 第二种 可选属性
interface Person{
   name:string;
   age>:number
}
let tom:Person={
    name:'tom'
}
/*任意属性
interface Person{
  name:string;
  [propName:string]:any
}
let tom:Person={
   name:'tom'
   gender:'male'
}
/* 只读属性
interface Person{
   readonly id:number;
   name:string
}
let tom:Person={
   id:111,
   name:'tom'
}
**** 使用readonly定义的属性id初始化后,不能再次赋值,否则报错。

编译

  • 第一种,(单一文件) 代码变化,自动编译(tsc xx.ts -w)
  • 第二种(多个文件) 配置tsconfig.json文件
{

}

再次执行 tsc -w

编译 tsconfig.json

{
/*
tsconfig.json是ts编译器的配置文件,ts编译器可以根据它的信息来对代码进行编译
*/
/*
* include 用来指定那些ts文件需要被编译
* ** 表示任意目录
* * 表示任意文件
*/
"include":[
     "./src/**/*"
],
/*
* exclude 表示不需要编译的文件目录
* 默认值:["node_modules","bower_components","jspm_packages"]
*/
"exclude":[
    "./src/hello/**/*"
],
/*
* files 指定被编译文件的列表,只有需要编译的文件少时才会用到
*/
"files":[
    "core.ts",
    "sys.ts"
],
/*
* compilerOptions 
*/
compilerOptions:{
     // target 用来指定ts被编译为的ES的版本 
     "target":"ES6,es2015"  // 可以传多个
     // module 指定要使用的模块化的规范
     "module":"es2015",
     // lib 用来指定项目中要使用的库
     "lib"[],
     // outDir 指定编译侯文件所在的目录(输出目录)
     "outDir""./dist",
     // outFile 将代码合并为一个文件
     // 设置outFile后,所有的全局作用域中的代码会合并到同一个文件中
     "outFile":"./dist/app.js",
     // 是否对JS文件进行编译,默认为false
    "allowJs"true,
    // 是否检查js代码是否符合语法规范,默认为false
    "checkJs":true// 是否移除注释
    "removeComments":true,
    // 不生成编译后的文件
    "noEmit":true,
    // 当有错误时不生成编译后的文件
    "noEmitOnError":true,
    // 用来设置编译后的文件是否使用严格模式,默认false
    "alwaysStrict"false,
    // 不允许使用隐式的any类型
    "noImplicitAny":true,
    // 不允许不明确类型的this
    "noImplicitThis":true,
    // 严格的检查空值
    "strictNullChecks":true,
    // 所有严格检查的总开关
    "strict":true
},

}

接口