Typescript不会生成未引用的成员

时间:2013-07-23 08:01:26

标签: javascript typescript knockout-mapping-plugin

我遇到了TypeScript编译器生成的JS代码的问题。 对于这样的课程:

// Class
export class UserDTO {
    Id: number;
    FirstName: string;
    LastName: string;
    DateOfBirth: Date;

    getFUllName(): string {
        return this.FirstName + ' ' + this.LastName;
    }        
}

TypeScript生成以下代码:

define(["require", "exports"], function(require, exports) {
    // Class
    var UserDTO = (function () {
        function UserDTO() {
        }
        UserDTO.prototype.getFUllName = function () {
            return this.FirstName + ' ' + this.LastName;
        };
        return UserDTO;
    })();
    exports.UserDTO = UserDTO;
});
//@ sourceMappingURL=TestClass.js.map

上面的代码不包含未使用的(未引用的)字段,但我在一些“对象到对象”映射的情况下需要它们。是否有可能强制编译器始终生成它们?

我正在使用Visual Studio 2012中的TypeScript 0.9.1。以下是我的编译器选项:

<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptIncludeComments>true</TypeScriptIncludeComments>
<TypeScriptSourceMap>true</TypeScriptSourceMap>
<TypeScriptModuleKind>AMD</TypeScriptModuleKind>

提前感谢任何提示。

2 个答案:

答案 0 :(得分:4)

您无需在JavaScript中声明字段。 TypeScript的字段声明仅用于类型检查。您仍然可以使用已编译的代码访问您的字段。

var o = new UserDTO();
o.FirstName = 'John';
o.LastName = 'Doe';
console.log(o.getFUllName()); // "John Doe"

小提琴:http://jsfiddle.net/nPr6f/

答案 1 :(得分:3)

您可以在定义它们时对其进行初始化:

export class UserDTO {
    Id: number = 0;
    FirstName: string = '';
    LastName: string = '';
    DateOfBirth: Date = undefined;

    getFUllName(): string {
        return this.FirstName + ' ' + this.LastName;
    }        
}

生成的javascript:

var UserDTO = (function () {
    function UserDTO() {
        this.Id = 0;
        this.FirstName = '';
        this.LastName = '';
        this.DateOfBirth = undefined;
    }
    UserDTO.prototype.getFUllName = function () {
        return this.FirstName + ' ' + this.LastName;
    };
    return UserDTO;
})();

A demo to show looping through such properties.