安装与运行
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
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-3017.html