如何将\ convert \ cast任何类型对象分配给特定类型?

时间:2017-07-22 07:32:21

标签: javascript angular typescript

我有类型为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
}

3 个答案:

答案 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”将是未定义的