如何将任何类型对象赋值\转换\强制转换为特定类型?



我有任何类型的对象,我分配了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"将未定义

最新更新