TypeScript-02-类型
2021-12-14 本文已影响0人
JerrySi
1.六种类型
// ts非严格模式下, 类型都可以为null
const a: string = 'string'
// Infinity无穷大
const b: number = Infinity //NaN //123
const c: boolean = true
const d: null = null
const e: void = undefined
// 因为Symbol是es6, tsconfig使用的是es5
// 可以通过修改tsconfig.json里面lib标准库配置调整
const f: symbol = Symbol()
2.对象
// object 可以对象、数组、函数
const foo: object = function(){} //[] //{}
const foo1: {} = {foo: '1', value: '2', value1: 1}
const foo3: {foo: number, value: number} = {foo: 1, value: 2}
3.数组
const arr: Array<number> = [1, 2, 3]
const arr1: number[] = [1, 2, 3]
4.元组
const tuple: [number, string] = [1, '']
const name = tuple[0]
const age = tuple[1]
const [name1, age1] = tuple
5.枚举
// 默认0开始
// 如果设置了一个值,后面值从这个数字累计
// 不加const,会生成一个双向键值对象
const enum Type {
Type1 = 6,
Type2,
Type3,
}
enum StringType {
Type1 = 'Type1',
Type2 = 'Type2',
Type3 = 'Type3',
}
6.函数
function sum(a: number, b?: number, ...args: number[]):number {
return 10
}
sum(1)
sum(1,2)
sum(1,2,3)
const a: (a: number, b?: number | undefined, ...args: number[]) => number = function sum(a: number, b?: number, ...args: number[]):number {
return 10
}
7.any
function stringify(value: any):string {
return JSON.stringify(value)
}
8.推断
let a = 23
//a = ''
let b: any = 23
b = ''
let c
c = ''
c = 123
9.断言
const a = [1,2,3,4]
const r = a.find( i => i > 0)
// 断言
const result: number = r as number
// JSX下面会冲突,不能使用
const result1: number = <number>r
10.接口
// 接口用于对对象进行限制
// 接口属性可以分号分割
// ?可选
// readonly只读
// [propName: string]支持key为string的数组
interface UserInfo {
name: string
age: number
alias?: string
readonly sex: string
}
function foo(info: UserInfo) {
console.log(info.age + info.name + info.sex + info.alias)
}
const userInfo: UserInfo = {
name:'',
age:213,
sex:'man',
}
userInfo.name = ''
// userInfo.sex = ''
foo(userInfo)
interface Cache {
[friends: string]: string
}
const cache: Cache = {
}
cache.a = ''
cache.b = ''
cache.c = ''
11.类
class Person {
// ts中的成员属性,必须声明
// 如果声明没有初始化,那么必须在构造函数中初始化
// public:默认 外部可以使用
// protected: 外部不能访问, 可继承, 而且可以一直继承下去
// private: 外部不能访问, 不可继承
// constructor添加了private, 可以通过静态方法强制使用者调用
private name: string
public age: number
protected readonly gender: boolean = true
constructor(name: string, age: number){
this.name = name
this.age = age
this.gender = false
}
print():void {
console.log(`I am ${this.name}`)
}
}
12.类实现接口
interface Eat {
eat(food: string):void
}
interface Run {
run(distance: string):void
}
// 抽象类和抽象方法(和Android一样)
abstract class Animal implements Eat, Run {
eat(food: string):void {
}
run(distance: string):void {
}
abstract jump(high: string): void
}
13.定义类型
import { camelCase } from 'lodash'
declare function camelCase(input: string) : string
const rse = camelCase('hello haha')
ts中类型声明的文件, 文件名格式:文件名.d.ts