fab*_*i_k 4 casting typescript angular
我有一个关于Typescript中的强制转换的问题。
我有用例,将一个对象强制转换为具有方法的类的特定类型。之后,当我想调用此方法时,它是未定义的,请比较以下代码段:
export class Test {
property1: any;
property2: any;
constructor(){}
sayHello(): string {
return 'hello';
}
}
testData = {
property1: '',
property2: 2
} as Test;
testData.sayHello(); <-- undefined
Run Code Online (Sandbox Code Playgroud)
我还在stackblitz上的一个有角度的应用程序中准备了一个工作或不工作的示例:https ://stackblitz.com/edit/angular-y3s9r4
有人可以解释这种行为吗?方法又怎么可能inherit
呢?
在打字稿中,这称为类型断言,而不是强制类型转换。术语不同的原因恰恰是它的行为与其他语言不同,即没有运行时行为。类型断言不会转换值并且不会执行任何运行时检查,它们只会告诉编译器您作为开发人员知道某个值将属于某种类型。如何掌握这些知识与编译器无关。
所以这段代码:
testData = {
property1: '',
property2: 2
} as Test;
Run Code Online (Sandbox Code Playgroud)
只是告诉编译器对象文字是类型的Test
。对象文字与您的类具有相同的字段,但没有任何方法(因为没有人将它们放在那里)。
要创建类的实例,必须将new
运算符与类构造函数一起使用。如果要传递数据,则可以有一个接受数据并将其分配给当前实例的构造函数:
export class Test {
property1: any;
property2: any;
constructor(data: Partial<Test>) {
Object.assign(this, data);
}
sayHello(): string {
return 'hello';
}
}
let testData = new Test({
property1: '',
property2: 2
});
testData.sayHello(); //ok
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
500 次 |
最近记录: |