对于这个简单的案例,在Typescript中是否需要强制转换

时间:2013-03-21 13:47:29

标签: casting typescript

说我有一个test.ts和一个MY_MODULE.d.ts文件:

MY_MODULE.d.ts:

module MY_MODULE 
{
    export class Config { 
        UserId : string;
    };

    export function Init( config : Config );
}

test.ts:

/// <reference path="MY_MODULE.d.ts" />

MY_MODULE.Init(<MY_MODULE.Config>{ UserId: 'Josh' });

我的问题:是否可以修复定义文件或.ts文件,以便后者中的强制转换是不必要的?

2 个答案:

答案 0 :(得分:2)

使用export interface Config代替export class Config

答案 1 :(得分:0)

Typescript将根据对象的签名推断出正确的类型,因此不需要强制转换 将代码复制到操场中,立即拾取了几个编译错误。首先,Init需要实现 其次,Config类没有构造函数 以下代码干净利落地编译:

module MY_MODULE 
{
    export class Config { 
        UserId : string;
    };

    export function Init( config : Config ) {
    }
}

var myConfig = new MY_MODULE.Config();
myConfig.UserId = 'Josh'

MY_MODULE.Init(myConfig);

最好为Config定义一个构造函数,如下所示:

module MY_MODULE 
{
    export class Config {
        UserId : string; 
        constructor(userId : string) {
            this.UserId = userId;
        }
    };
    export function Init( config : Config ) {
    }
}

MY_MODULE.Init(new MY_MODULE.Config('Josh'));