我有一个需要在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:无法读取属性'低'未定义的
答案 0 :(得分:2)
因为js使用了字符串,所以你不会忘记以后的事情 您收到该错误是因为实际的实现没有枚举,您只声明了它。
您要找的是String Literal Types,它看起来像这样:
declare module "loggerjs" {
export type Severity = "Low" | "High";
export function log(severity: Severity);
}