安装与运行
npm install -g typescript
tsc hello.ts
TS基本的几种数据类型
let idDone: boolean = false
let age: number = 20
let binaryNumber: number = 0b1111
let firstName: string = 'valzt'
let message: string = `Hello, ${ firstName} , age is ${ age} `
let u: undefined = undefined
let n: null = null
let num: number = undefined
let notSure: any = 4
notSure = 'maybe it is a string'
notSure = true
notSure. myName
notSure. getName ( )
let numberOrString: number | string = 234
numberOrString = 'valzt'
numberOrString = true
let arrOfNumbers: number[ ] = [ 1 , 2 , 3 , 4 ]
let user: [ string, number] = [ 'valzt' , 20 ]
interface
interface IPerson {
readonly id: number,
name: string,
age? : number
}
let valzt: IPerson = {
id: 123 ,
name: 'valzt' ,
age: 20
}
valzt. id = 111
函数
function add ( x: number, y: number, z? : number) : number {
if ( typeof z === 'number' ) {
return x + y + z
} else {
return x + y
}
}
const add1 = function ( x: number, y: number, z: number = 10 ) : number {
if ( typeof z === 'number' ) {
return x + y + z
} else {
return x + y
}
}
const add2: string = add1
const add3: ( x: number, y: number, z? : number) => number = add1
let result = add ( 1 , 2 )
ts中的类型推论
let str = 'str'
str = 1
ts运行工具
npm i -g ts-node
ts-node hello.ts
类和对象
class Animal {
public name: string
static categories: string[ ] = [ 'mamal' , 'bird' ]
static isAnimal ( a) {
return a instanceof Animal
}
constructor ( name: string) {
this . name = name
}
run ( ) {
return ` ${ this . name} is running`
}
}
const snake = new Animal ( 'lily' )
console. log ( Animal. categories)
console. log ( Animal. isAnimal ( snake) )
console. log ( snake. name)
snake. name = 'valzt'
console. log ( snake. name)
console. log ( snake. run ( ) )
class Dog extends Animal {
bark ( ) {
return ` ${ this . name} is barking`
}
}
const xiaobao = new Dog ( 'xiaobao' )
console. log ( xiaobao. run ( ) )
console. log ( xiaobao. bark ( ) )
class Cat extends Animal {
constructor ( name) {
super ( name)
console. log ( this . name)
}
run ( ) {
return `Meow,` + super . run ( )
}
}
const maomao = new Cat ( 'maomao' )
console. log ( maomao. run ( ) )
interfece抽象类的方法
interface Radio {
switchRadio ( ) : void
}
interface Battery {
checkBatteryStatus ( )
}
interface RadioWithBattery extends Radio {
checkBatteryStatus ( )
}
class Car implements RadioWithBattery {
switchRadio ( ) {
}
checkBatteryStatus ( ) {
}
}
class CellPhone implements Radio {
switchRadio ( ) {
}
}
枚举
enum Direction {
Up,
Down,
Left,
Right
}
console. log ( Direction. Up)
console. log ( Direction. Down)
console. log ( Direction[ 0 ] )
console. log ( Direction[ 1 ] )
enum Direction1 {
Up = 10 ,
Down,
Left,
Right
}
console. log ( Direction1. Up)
console. log ( Direction1. Down)
const enum Direction2 {
Up = 'UP' ,
Down = 'DOWN' ,
Left = 'LEFT' ,
Right = 'RIGHT'
}
const value = 'UP'
if ( value === Direction2. Up) {
console. log ( 'go up' )
}
泛型
// 泛型:只指在定义接口和类的时候,不预先指定具体类型,在使用的时候在指定具体类型的一种特征
function echo< T > ( arg: T ) : T {
return arg
}
const result = echo ( 'str' )
function swap< T , U > ( tuple: [ T , U ] ) : [ U , T ] {
return [ tuple[ 1 ] , tuple[ 0 ] ]
}
const result1 = swap ( [ 'string' , 123 ] )
console. log ( result1)
类型别名和类型断言
type PlusType = ( x: number, y: number) => number
function sum ( x: number, y: number) : number {
return x + y
}
const sum2: PlusType = sum
type NameResolver = ( ) => string
type NameOrResolver = string | NameResolver
function getName ( n: NameOrResolver) : string {
if ( typeof n === 'string' ) {
return n
} else {
return n ( )
}
}
function getLength ( input: string | number) : number {
if ( ( < string> input) . length) {
return ( < string> input) . length
} else {
return input. toString ( ) . length
}
}