【发布时间】:2017-09-15 01:29:29
【问题描述】:
我用 Typescript 写了这段代码
import redis from 'redis';
import Promise from 'bluebird';
const DEFAULT_REDIS_TTL = 7200; // 2 hours
export default class Redis {
readonly client : any;
ttl : number = DEFAULT_REDIS_TTL;
constructor(uri? : string, ttl : number = DEFAULT_REDIS_TTL) {
this.client = redis.createClient(uri);
}
...
}
export { Redis };
编译器给了我这个
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var redis_1 = require("redis");
var bluebird_1 = require("bluebird");
var DEFAULT_REDIS_TTL = 7200; // 2 hours
var Redis = (function () {
function Redis(uri, ttl) {
if (ttl === void 0) { ttl = DEFAULT_REDIS_TTL; }
this.ttl = DEFAULT_REDIS_TTL;
this.client = redis_1.default.createClient(uri);
this.client.on('error', function (error) {
console.error(error);
});
...
exports.Redis = Redis;
exports.default = Redis
我不知道为什么'redis.createClient(uri);just becomeredis_1.default.createClient(uri);`
尝试在节点中运行我的代码时出现以下错误
build/Lib/Cache/Redis.js:11
this.client = redis_1.default.createClient(uri);
^
TypeError: Cannot read property 'createClient' of undefined
我的tsconfig 看起来像这样
{
"compilerOptions": {
"module": "mymodule",
"target": "es5",
"noImplicitAny": false,
"sourceMap": false,
"module": "commonjs",
"outDir": "build"
},
"include": [
"src/**/*.ts"
],
"exclude": [
"node_modules"
]
}
我在主目录运行编译器
tsc
我正在使用node 6.7.2
【问题讨论】:
-
请注意您的代码中的
export default class Redis如何在输出中变成exports.default = Redis。redis也是如此,它被导入为exports.default = redis,这就是它被使用redis_1.default.createClient的原因。redis_1引用exports,redis_1.default引用exports.default。您可能遇到的问题只是缺少一个模块(您是否运行过npm i redis?)。在您的代码中尝试console.log(redis) -
使用不同的导入语法可能会有所帮助:
import * as redis from 'redis';和import * as Promise from 'bluebird'; -
我运行
console.log(redis)和console.log(redis.createClient)并且我得到了 redis 对象并像[Function]一样输出第二个控制台日志 -
我会尝试更改导入语法
标签: node.js typescript tsc