的例子如下:tsc编译选项与该知识点相关:strictPropertyInitializationstrictPropertyInitialization设置控制类字段是否需要在构造函数中初始化。正确方式:classGoodGreeter{name:string;constructor(){this.name="你好";}}请注意,此字段需要在构造函数本身中初始化。TypeScript不会分析您从构造函数调用的方法来检测初始化,因为派生类可能会覆盖这些方法并且无法初始化成员。类成员需要在构造函数中初始化。如果在构造函数中调用其他函数,然后在这些其他函数中进行字段初始化,这样是行不通的。如果你必须这样做,即你打算通过构造函数以外的方式显式初始化字段(例如,可能一个外部库正在为你填充部分类),你可以使用明确的赋值断言运算符,!:classOKGreeter{//未初始化,但没有错误名称!:string;}如果一个类字段被设置为只读,则意味着它只能在构造函数中赋值。子类构造函数的第一条语句必须是super()函数调用;什么是TypeScript类中的成员方法是准确定义的:类上的函数属性称为方法。除了标准的类型注解,TypeScript并没有在方法中添加任何其他新的内容。需要注意的是,在TypeScript方法实现中,this.必须用于访问其成员变量。在下面的代码中,在m方法内部,访问的是类外定义的number类型的x变量,而不是类内的string类型变量。让x:number=0;classC{x:string="hello";m(){//这试图从第1行修改'x',而不是类属性x="world";Type'string'isnotassignabletotype'number'.Type'string'isnotassignabletotype'数字'。}}class访问它的accessorsclassC{_length=0;得到长度(){返回这个._length;}设置长度(值){this._length=value;}}TypeScript对accessor有一些特殊的推断规则:(1)如果get存在但没有set,则该属性自动为只读(2)如果没有指定setter参数类型,则从getter的返回类型推断(3)Getter和setter必须具有相同的成员可见性关于TypeScript类继承和接口实现的一些陷阱重要的是要了解implements子句只是检查一个类是否可以被认为是接口类型。它根本不会改变类的类型或其方法。一个常见的错误来源是假设一个implements子句改变了一个类的类型——它没有!看这个例子:interfaceCheckable{check(name:string):boolean;}classNameCheckerimplementsCheckable{check(s){//注意这里没有错误returns.toLowerCase()==="ok";}}consta=newNameChecker();console.log(a.check('ok'));语法错误:原因是在第六行代码中,我们没有为check方法的参数s指定类型,所以它的类型默认为any。这与接口Checkable中定义的check方法的入参类型字符串不一致。变通方法:同样,实现具有可选属性的接口不会创建属性:interfaceA{x:number;y?:number;}C类实现A{x=0;}constc=newC();c.y=10;解决方案:更多Jerry原创文章在这里:《王子熙》:
