npm i typescript -g
3.使用
function test (a: number,b:number): number{
return a +b
}
2.全局会提供一个tsc
命令使用
tsc index.ts
1.创建配置文件
tsc --init
2.设置配置项
target:转换成哪个版本的js代码es5es6
module:使用的模块化标准是什么
outDir:最终js代码存放的文件夹路径
rootDir:ts代码的存放路径
strict:是否将ts代码转换成严格模式的js代码
3.使用配置文件
tsc -p ./tsconfig.json
//number
let a: number = 10
let a: number = NaN
let c: number = Infinity
let d: number = 0xA12
let e: number = 0b101001
let f: number = 0o75
?
//string
let str: string = "这是一个字符串"
let str1: string = ‘这也是一个字符串‘
let str2: string = `这是一个模板字符串${a}`
?
//boolean
let flag: boolean = true
let flag: boolean = false
?
//Array<数据类型>
let arr: Array<number> = [1,2,3,4]
let arr1: number[] = [1,2,3,4]
?
//元组
let arr2: [number,string] = [1,‘a‘]
arr2[0] = ‘a‘//报错!
arr2[0] = 100
arr2[2] = ‘a‘//没有索引的元素,则代表是新增,但是只能是声明的两种类型
arr2[2] = []//非number,string
?
//void
let res: void = undefind
?
//undefined
//null
let res1: undefined = undefined
let res2: null = null
?
//any
let somevar: any = 10
somevar = ‘abc‘
somevar = []
?
//never
//一般用在不可能返回内容的函数的返回值类型设置
function test(): never{
while(true){
//死循环不可能有返回值
}
}
?
//object
let o: object = {}
let o: {name:string,age:number} = {name:‘张三‘,age:12}
?
//enum枚举,给一组数据赋值友好的名字
enum Gender{
male = 1,
famale = 0,
unknow = -1
}
let gender: Gender = Gender.male
let o ={
gender:Gender.male
}
?
//类型断言
let str1: any = ‘abc‘
let len: number = (<string>str1).length
class Person{
//与ES6不同的是,TS属性必须声明,需要指定类型
name: string
//声明好属性之后,属性必须赋值一个默认值或者在构造函数中进行初始化
// age:number = 10
age: number
constructor(name: number){
this.name = name
this.age = age
}
sayHello(msg: string): void{
console.log(msg)
}
}
class Animal{ age: number constructor(age: number){ this.age = age } eat(){ console.log(‘吃鸡腿‘) } } class Dog extends Animal{ type: string constructor(type: string,age: number){ super(age) // 继承必须要super父类过来的属性 this.type = type } // 子类出现与父类同名的方法,则会进行覆盖 eat(){ console.log(‘狗对象中的eat方法‘) } } var dog = new Dog(‘哈士奇‘,18) dog.eat()
在类的成员前添加关键字来设置当前成员的访问权限
public:公开默认,所有人都可以访问
private:私有的,只能在当前类中进行访问
protected:受保护的,只能在当前类或者子类中进行访问
enum Color{ red, yellow, blue } class Car{ // 如果不加访问修饰符,则当前成员默认是公开的,所有人都可以访问 color: Color constructor(){ this.color = Color.red } private run(){ console.log(‘当前成员只能在当前类中使用‘) } protected loadPeople(){ console.log(‘在当前类中或子类中方位‘) } } let byd = new Car() byd.color // 红色 byd.run() // 报错! byd.loadPerson() // 报错,只能在当前类中或者子类中 class Audi extends Car{ sayHi(){ console.log(this.color) this.loadPeople() // 正常调用 } } let audi = new Audi() audi.color // 红色
class Cat{ readonly name: string type: string // type: string public代替了这两句 // 构造函数中给参数前面加上修饰符,就相当于声明了一个属性 constructor(public type: string){ this.name = ‘加菲‘ // this.type = type public代替了这两句 } } var cat = new Cat("橘猫") cat.name // 正常访问 cat.name = 123 // 报错1
class People{ // name: string = ‘‘ private _name: string = "" // 属性的存取器 get name(): string{ return this._name } set name(value: string){ // 设置器中可以添加相关的校验逻辑 if(value.length < 2 || value.length > 5){ throw new Error(‘非法昵称,禁止使用!‘) } this._name = value } } var p = new People p.name = ‘111111‘ // 报错 p.name = ‘123‘
接口使用interface进行声明
interface AjaxOptions{ url: string, type?: string, // 可选属性加? data?: object, // 可选属性加? success(data: object): void }
// options参数中 需要包含 url type data success function ajax(options: AjaxOptions){ } ajax({ url: ‘www.baidu.com‘, type: ‘get‘, // 可不选 data: {}, // 可不选 success(data){ } })
接口只读属性
interface Point{ readonly x: number, y: number, [propName: string]: any // 加了额外属性检查propName不报错 } let poi: Point = { x:10, y:10, z:100 // 加了额外属性检查propName不报错 } poi.x = 100 // 报错,x是可读
interface SumInterFace{ (a: number,b: number): number } let sum: SumInterFace = function(a: string,b: number){ // 报错,接口规范为number类型 return a + b }
interface PersonInterFace{ name: string, age: string, eat(): void } class XiaoMing implements PersonInterFace{ name: string = ‘小明‘ age: number = 18 eat(){ console.log(‘吃饭‘) } } class XiaoHong implements PersonInterFace{ name: string = ‘小红‘ age: number = 18 eat(){ } } var xh = new XiaoHong() xh.name // 放心使用数据,因为都遵守PersonInterFace接口 xh.age // 放心使用数据,因为都遵守PersonInterFace接口 xg.eat() // 放心使用数据,因为都遵守PersonInterFace接口
1.接口继承接口
interface TwoDPoint{ x: number, y: number } interface ThreeDPoint{ z: number } interface FourDPoint extends ThreeDPoint,TwoDPoint{ time: Data } let poi1: FourDPoint = { z : 100, x : 100, y : 100, time : new Data }
2.接口继承类
class Bird{ type: string = ‘画眉鸟‘ fly(): void{ } } interface Fly extends Bird{ } let flyingBird: Fly = { type:‘啄木鸟‘, fly():void{ } }
原文:https://www.cnblogs.com/lok660/p/11911745.html