typescript之入门篇二

属性重命名

const { a: newName1, b: newName2 } = { a: 1., b: 2 }

默认值

interface params {
  a: number;
  b?: number; 
}
function test(obj: params): void {
  const { a, b = 1200 } = params
  consoloe.log(b) // 1200
}
  • 当缺省的b为undefined时,给一个默认的1200
  • ?的作用代表可传可不传
  • void 代表没有返回值

只读属性

interface params {
    readonly a?: number;
    readonly b?: number;
}

const xxx: params = {
  a: 1,
  b: 2
}
const { a } = xxx
a = 100
consolo.log(a) // 100
xxx.a = 100 // error
  • 通过解构的方式可以修改值, 但是不能直接修改对象中的值
  • readonly表示此属性只读

ReadonlyArray

  • typescript 具有ReadnolyArray类型
let a: number[] = [1, 2, 3, 4]
let ro: ReadonlyArray<number> = a
ro.push(1000) // error
a.push(2000) // ro 和 a均为[1, 2, 3, 4, 1000]

readonly vs const

  • readonly作用于属性, const 作用于变量

额外的属性检查

  • 当我们需要传入一个未知属性时,同时对这个未知属性检查
interface configProp {
  color?: string;
  width?: number;
  [propName: string]: any
}

function createConfig(config: configProp): { color: string }{
  xxx
  return { color: 'green' }
}

createConfig({ randomValue: string })

函数类型

  • 接口不仅能定义函数参数,也能定义函数
interface searchProps {
  (a: string, b?: string): boolean
}

let search: searchProps;
search = function(){
  return true
}
search()  //error
search('123') // true

可索引类型

  • 使用number类型的索引会返回string类型的字符串
interfaceArrayString {
  [index: number]: string
}

let arr: ArrayString;
arr = ['1', '2']
let str: string = arr[0]
  • 编译时会出现error,因为number类型的索引只能返回number类型的字符串,而name返回的是string类型的字符串,所以要修改成name: number
interface NumberDic {
  readonly [index: number]: number;
  name: string
}

实现接口

interface Clock {
  currentTime: Date;
  setTime(d: Date): void;
}

class Clo implements Clock {
  currentTime: Date
  setTime(d: Date){}
  constructor(h: number, m: number){}
}

继承接口

interface Shape {
  color: string;
}

interface Size {
    width: number;
}

interface S extends Shape, Size {
  xxx: string;
}

let a = <S>{}
a.xxx = '123'

混合类型

interface Counter {
  (start: number): string;
  interval: number;
  reser(): void;
}

function getCounter(): Counter {
  let counter = <Counter>function(start: number){}
  return counter;
}

let c = getCounter()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,029评论 0 38
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,174评论 1 32
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,911评论 2 9
  • 世风诚信,公正扬仁润。裁判定,居公认。強行罚老赖,严处坚执阵。标黑榜①,超高用费②条规禁。 国法诚和稳...
    颜尽开阅读 469评论 0 0
  • 上小学时候,每天下午别的同学都回家了,我和班上的另外一些同学都被数学老师留下来,补习数学作业。每天就是把课堂上的作...
    xgla枫叶阅读 280评论 0 0