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 become
redis_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)' – jevgenig
使用不同的導入語法可以幫助:'import * as'redis';'和'import *'作爲'bluebird'的Promise;' – artem
我運行'console.log (redis)'和'console.log(redis.createClient)',我得到了redis對象並且輸出如[[Function]'爲第二個控制檯日誌 – user7887107