基础类型
let str: string = 'a'
let num: number = 1
let bool: boolean = false
let nu: null = null
let und: undefined = undefined
任意类型
let any: any = [1, 2, 3]
数组
let arr1: number[] = [1, 2, 3, 4]
let arr2: (string | number | boolean)[] = ['a', 'b', 100, false]
let arr3: Array<string> = ['a']
let arr4: [string, number] = ['a', 2]
对象
interface Iobj {
readonly mes: string;
data?: {
list: { id: number, a: string }[];
obj?: Iobj2
};
suc: boolean
}
interface Iobj2 {
a: string
}
let obj: Iobj = {
mes: '成功',
data: {
list: [{ id: 1, a: 'a' }, { id: 1, a: 'a' }],
obj: { a: 'a' }
},
suc: true
}
函数
function fun(a: object, b?: number, c: string = '3'): object {
return { a, b, c }
}
fun({ a: 1 })
function fun(a: object, b?: number, c: string = '3'): void {
return { a, b, c }
}
fun({ a: 1 })
const fun2 = (a: number, b: number): number => {
return a + b
}
完整写法
const fun2: (a: number, b: number) => number = (a: number, b: number): number => {
return a + b
}
类
class Person {
public userName: string
userAge: number
constructor(name: string, age: number) {
this.userName = name
this.userAge = age
}
run(): number {
return this.userAge
}
}
class Child extends Person {
ChildRun() {
return this.userName
}
}
let p1 = new Person('zhangsan', 28)
let c1 = new Child('lisi', 18)
抽象类
abstract class Person1 {
abstract run(): number
}
class Child1 extends Person1 {
run() { return 1 }
}
约束类
interface Ipo {
userName: string;
run(): number
}
interface Ipo2 {
userAge: number
}
class Person2 implements Ipo, Ipo2 {
run() { return 1 }
userName: string
userAge: number
}
interface Ipo {
userName: string;
run(): number
}
interface Ipo2 extends Ipo{
userAge: number
}
class Person2 implements Ipo2 {
run() { return 1 }
userName: string
userAge: number
}
泛型
function add<T, U>(a: T, b: U): any {
return a + b
}
add<number,string>(1, 'wo')
interface leng{
length:number
}
funciton Length<T extends leng>(str:T):any{
return str.length
}
Length<string>('wo')
funciton Length<T extends String | string[]>(str:T):any{
return str.length
}
Length<string>('wo')
Length<string[]>(['a','b'])
Length<number[]>([1,2,3,4])
interface Idata<T>{
a:T;
b:T;
c:string;
}
let obj: Idata<number> = {
a:1,
b:2,
c:'aaa'
}
class Name<T>{
name: T
constructor(name: T) {
this.name = name
}
}
let n = new Name<string>('wo')