我有任何类型的对象,我分配了myResponse类型的对象,如下所示
public obj: any;
public set Result() {
obj = myResponse;
}
我还有另一个函数,我想将任何类型转换为我的特定类型,如下所示
public myFunction(){
let x: MyResponse = (MyResponse) obj;
conosle.log(x.somePropoerty);
}
我尝试了不同的方法,我在网上得到了一些方法,例如用于铸造的尖括号,Object.assign 但它不起作用。
我的响应类如下所示
export class MyResponse{
public property1: string;
public property2: number;
//some other code
}
TypeScript 中没有强制转换,只有类型断言。您可以通过执行以下操作断言obj
属于MyResponse
类型:
let x: MyResponse = obj as MyResponse;
请注意,这仅用于编译时检查。如果您的obj
在运行时不是MyResponse
实例,则这将不起作用。
TypeScript 中的强制转换(Microsoft称之为类型断言(可以通过两种方式完成。
假设我们得到了以下对象定义:
class MyClass {
public someMethod:void() {
console.log("method invoked");
}
public static staticMethod(object: MyClass) {
console.log("static method");
object.someMethod();
}
}
第一种转换方式与 Java 风格非常相似。您需要使用<>
标志。
let someVariable: any = new MyClass();
someVariable.someMethod(); //won't compile
MyClass.staticMethod(someVariable); //won't compile
(<MyClass> someVariable).someMethod(); //will compile
MyClass.staticMethod(<MyClass> someVariable); //will compile
第二种方式如图@Saravana所示(使用as
关键字(:
//all below lines compiles
let someVariable: any = new MyClass();
let another: MyClass = someVariable as MyClass;
(someVariable as MyClass).someMethod();
MyClass.staticMethod(someVariable as MyClass);
查看此链接以获取更多信息:https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions
要正确地转换为"类型",基本上需要更改对象的原型。 这可以通过使用构造函数创建新实例,然后复制现有属性来完成。
否则,类型断言将仅提供编译时检查!在运行时,"someMethod"将未定义