1

对不起,如果这个问题有豆问和问。但是我一直遇到这个讨厌的“错误 TS2349”,每次我想在我的Typescript项目中使用外部节点包时,什么还没有TypeScript 定义:(

这是我当前的设置

node -v v5.0.0
tsc -v message TS6029: Version 1.6.2
OS: 4.1.12-1-ck GNU/Linux Arch 
tsconfig {
    "compilerOptions": {
        "module": "commonjs",
        "target": "ES5",
        "noImplicitAny": false,
        "outDir": "../lib",
        "rootDir": ".",
        "sourceMap": false
    },
}
external node package : "cssnext": "^1.8.4"

我的主要代码

/// <reference path="../definitions/tsd/node/node.d.ts" />
import * as fs from "fs";
import * as cssnext from "cssnext";
let source = "./index.css";
let output = cssnext(
  fs.readFileSync(source, "utf8"),
  {from: source}
);
fs.writeFileSync("dist/index.css", output);

我在找什么?

var cssnext = require("cssnext")
var fs = require("fs")

var source = "./index.css"
var output = cssnext(
  fs.readFileSync(source, "utf8"),
  {from: source}
)
fs.writeFileSync("dist/index.css", output)

我得到了什么:(

tsc -p ./src;
src/main.ts(36,14): error TS2349: Cannot invoke an expression whose type lacks a call signature.

** _reference.d.ts 有 **

declare module "cssnext" {}
declare function cssnext(str: any,ops:Object): string | Object;

真正的问题是

什么是英语中的“错误 TS2349”,在这种情况下,我如何编写一个mad max TypeScript 定义来解决这个问题和相关问题。:)

我喜欢 Type Script 方式,但其他时候 :(

** 回答 **

在下面的代码的帮助下解决这个问题是:

declare module "cssnext" {
    function cssnext(str: string,ops:Object): string | Object;
    export default cssnext;
} 
import * as cssnext from "cssnext";
let cssnext(str,op)

它可能不是 100% 的 cssnext 投诉,但它是 TSD 的起点。

4

1 回答 1

2

这个定义

declare module "cssnext" {}
declare function cssnextLib(str: any,ops:Object): string | Object;

说有一个名为的模块"cssnext"没有成员。这是您编写时导入的类型import * as cssnextLib from "cssnext";cssnextLib您在上述定义中编写的函数被 遮蔽(隐藏) import,因此您看不到它。

你应该写的是:

declare module "cssnext" {
    function cssnextLib(str: any,ops:Object): string | Object;
    export = cssnextLib;
}
于 2015-11-12T18:43:25.310 回答