str*_*her 5 typescript knex.js
我想使用 TypeScript (v1.5) 定义 knex 迁移,但无法以类型安全的方式定义向上/向下回调:
这就是我认为可能有效的方法(但显然无效):
/// <reference path="../../typings/knex/knex.d.ts" />
/// <reference path="../../typings/bluebird/bluebird.d.ts" />
exports.up = function(k : knex.Knex, Promise : Promise<any>) {
};
exports.down = function(k: knex.Knex, Promise : Promise<any>) {
};
Run Code Online (Sandbox Code Playgroud)
TSC 输出是 error TS2304: Cannot find name 'knex'.
我尝试了一些变化,包括添加import knex = require("knex");但没有运气。
供您参考, knex.d.ts 文件声明了一个这样的模块:
declare module "knex" {
// ...
interface Knex extends QueryInterface { }
interface Knex {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?还是我在这里尝试了一些不可能的事情?
该问题是由 knex.d.ts 文件引起的,该文件不导出 Knex 接口本身,而是仅导出用于创建“Knex”实例的函数。
解决方案:
更改knex.d.ts文件以导出 Knex 本身。为此,请将export = _文件末尾的语句替换为以下代码块:
function Knex( config : Config ) : Knex;
export = Knex;
Run Code Online (Sandbox Code Playgroud)
工作迁移如下所示:
/// <reference path="../../typings/knex/knex.d.ts" />
/// <reference path="../../typings/bluebird/bluebird.d.ts" />
import Knex = require("knex");
exports.up = function(knex : Knex, Promise : Promise<any>) {
};
exports.down = function(knex: Knex, Promise : Promise<any>) {
};
Run Code Online (Sandbox Code Playgroud)
这样效果很好。我将创建一个拉取请求以将更新内容添加knex.d.ts到 DefinitlyTyped 存储库中。
| 归档时间: |
|
| 查看次数: |
7634 次 |
| 最近记录: |