类型声明
- 数组
** 数组**
// 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
},
}