我有类型为any的对象,我分配类型为myResponse的对象,如下所示
public obj: any;
public set Result() {
obj = myResponse;
}
我有另一个函数,我想将任何类型转换为我的特定类型,如下面的
public myFunction(){
let x: MyResponse = (MyResponse) obj;
conosle.log(x.somePropoerty);
}
我尝试了不同的方法,我在网上就像铸造的尖括号,Object.assign,但它不起作用。
MyResponse类如下所示
export class MyResponse{
public property1: string;
public property2: number;
//some other code
}
答案 0 :(得分:0)
TypeScript中没有强制转换,只有类型断言。您可以通过执行以下操作声明obj
类型为MyResponse
:
let x: MyResponse = obj as MyResponse;
请注意,这仅用于编译时检查。如果您的obj
在运行时不是MyResponse
实例,那么这将不起作用。
答案 1 :(得分:0)
TypeScript中的Casting(微软称之为 Type assertions )可以通过两种方式完成。
假设我们得到了以下对象定义:
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
答案 2 :(得分:0)
要正确转换为“Type”,您基本上需要更改对象的原型。 这可以通过使用构造函数创建一个新实例,然后复制现有属性来完成。
否则类型断言只会提供编译时检查!在运行期间,“someMethod”将是未定义的