TypeScript 1.8定义文件Enum for' magic string'性能

时间:2016-05-18 13:13:57

标签: javascript enums typescript

我有一个需要在tsc 1.8项目中使用的js lib。其中一个选项属性是一个魔术字符串,表示它仅支持一些值,即默认'选项1','选项2'。在我的.d.ts中,我想使用Enum来获得这个值,但是无法知道如何去做。例如......

loggerjs.js(外部lib示例)

var loggerjs = (function(){
    function log(severity) {
        var message;

        if (severity === "High") {
            message = "OMG!";
        }
        else if (severity === "Low") {
            message = "meh";
        }

        console.log(message)
    }
});

loggerjs.d.ts

declare module "loggerjs" {
    export enum Severity {
        "Low",
        "High"
    }

    export function log(severity: Severity);
}

需要配置

requirejs.config({
    baseUrl: '',
    paths: {
        app: ''
    },
    shim:{
        'loggerjs':{
            exports:'loggerjs'
        }
    }
});

requirejs(['app']);

app.ts

import * as loggerjs from "loggerjs";
loggerjs.log(loggerjs.Severity.Low);

app.js(已编译的js)

define(["require", "exports", "loggerjs"], function (require, exports, loggerjs) {
    "use strict";
    loggerjs.log(loggerjs.Severity.Low);
});

以上结果

  

app.js:3未捕获的TypeError:无法读取属性'低'未定义的

1 个答案:

答案 0 :(得分:2)

因为js使用了字符串,所以你不会忘记以后的事情 您收到该错误是因为实际的实现没有枚举,您只声明了它。

您要找的是String Literal Types,它看起来像这样:

declare module "loggerjs" {
    export type Severity = "Low" | "High";

    export function log(severity: Severity);
}