类
参数默认值 =
重写
TypeScript使用的是结构性类型系统。 当我们比较两种不同的类型时,并不在乎它们从何处而来,如果所有成员的类型都是兼容的,我们就认为它们的类型是兼容的。
然而,当我们比较带有private
或protected
成员的类型的时候,情况就不同了。 如果其中一个类型里包含一个private
成员,那么只有当另外一个类型中也存在这样一个private
成员, 并且它们都是来自同一处声明时,我们才认为这两个类型是兼容的。 对于 protected
成员也使用这个规则。
protected 能继承、不能再类外访问
private 不能继承、不能类外访问
readonly 只读属性必须在声明时或构造函数里被初始化。
参数属性
getter setter
其次,只带有 get
不带有set
的存取器自动被推断为readonly
静态属性 static
抽象abstract
抽象类可以包含成员的实现细节。abstract
关键字是用于定义抽象类和在抽象类内部定义抽象方法。
let greeterMaker: typeof Greeter = Greeter;
typeof Greeter==='function' true ---js中类由function实现
函数
为函数定义类型: 为参数和返回值加类型注解。 返回值类型可省略、ts compiler会自动判断。
let myAdd: (baseValue:number, increment:number) => void= function(x: number, y: number): void{ return ; };
推断类型
参数的个数和类型必须与声明一致
可选参数?
我们也可以为参数提供一个默认值当用户没有传递这个参数或传递的值是undefined
时。 它们叫做有默认初始化值的参数。
可选参数与末尾的默认参数共享参数类型。-->类型一样的
共享同样的类型(firstName: string, lastName?: string) => string
。 默认参数的默认值消失了,只保留了它是一个可选参数的信息。
与普通可选参数不同的是,带默认值的参数不需要放在必须参数的后面。 如果带默认值的参数出现在必须参数前面,用户必须明确的传入 undefined
值来获得默认值。
剩余参数 ...restOfName