如何在 Typescript 中使用 CSSNext 并避免讨厌的 "error TS2349" Typescript - 方式
How to use CSSNext in Typescript and avoid pesky "error TS2349" the Typescript - way
抱歉,如果这个问题有问题,请再问。但是每次我想在我的 Typescript 中使用 external Node Package 时,我总是遇到这个讨厌的 "error TS2349" 项目,什么还没有 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;
真题是
"error 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 的起点。
这个定义
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;
}
抱歉,如果这个问题有问题,请再问。但是每次我想在我的 Typescript 中使用 external Node Package 时,我总是遇到这个讨厌的 "error TS2349" 项目,什么还没有 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;
真题是
"error 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 的起点。
这个定义
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;
}