类型“控制台”上不存在“详细”属性

时间:2019-11-12 06:12:33

标签: typescript

我喜欢创建自己的控制台日志。

//-- Creating own console logs for better logging
console.detailed = function(payload) {
    return console.log(util.inspect(payload, { showHidden: false, depth: null }))
}

console.notice = function(payload) {
    return console.log('\x1b[33m%s\x1b[0m', payload)
}

我只是从打字稿开始,在这里我得到了错误

  

“控制台”类型上不存在“详细”属性

  

类型“控制台”上不存在属性“通知”。

有人可以帮助我解决上述错误吗?

更新:从萨拉瓦娜的答案中,有人可以用更人性化的方式向我解释这一点

  

在TypeScript中,就像在ECMAScript 2015中一样,任何包含   顶级导入或导出被视为模块。相反,一个文件   没有任何顶级进出口声明的情况将被视为   脚本的内容在全局范围内可用(因此   到模块)。”如果您的代码在模块内部,则需要   将其包装在全局中

还有

  

如果您是,则可能还需要将其包装在全局范围内   在模块内部使用它。看到   https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation

1 个答案:

答案 0 :(得分:2)

您必须扩展Console接口以添加新方法:

interface Console {
    detailed: (payload: any) => void
}

console.detailed("works");

请注意,如果您的file is a module(即它包含importexport语句),则必须declare this in the global scope才能起作用:

例如,如果您的文件是模块:

import * as moment from "moment"; // This makes this file a module

declare global {
    interface Console {
        detailed: (payload: any) => void
    }
}

// Your actual method definition
console.detailed = (payload) => {
    console.log("Timestamp:", moment().unix());
    console.log(payload);
}

// Usage
console.detailed("works");