首页 > 解决方案 > 为什么不允许我声明在 typescript 中实现的函数?

问题描述

我用我的参数类型和函数的全局声明创建了一个 .d.ts 文件。只要全局函数是用 javascript 编写的,它就可以正常工作。

当转换为打字稿时,我引用了 .d.ts 文件来导入类型。但是在编译时它抱怨函数被声明和实现,又名error TS2384: Overload signatures must all be ambient or non-ambient.

  1. 为什么我不能在声明中引用我的 d.ts 文件?/ 为什么我不允许声明在 typescript 中实现的函数?

在旧 C 中,可以将 h 文件包含在当前文件的声明中,而且通常非常有用。

  1. 我应该把实现、接口和函数声明放在哪里,我应该如何在它们之间引用以避免错误?(因为我目前为什么将它们拆分为 .ts 和 .d.ts 文件是不正确的)

做了一个缩小的例子:

// test.d.ts
interface test_option {
    a: boolean;
}

declare function test(options: test_option): boolean;
// test.ts
/// <reference path="test.d.ts" />

function test(options: test_option): boolean {
    return !options.a;
}
// test2.ts
/// <reference path="test.d.ts" />

window.console.log(test({a: true}));

标签: typescript

解决方案


这就是它的方式。您可以为旧版 JavaScript 文件创建定义文件,也可以在 typescript 中实现它。你不能为在 Typescript 中实现的东西创建定义文件。

解决方案看起来很简单,只需将函数的签名移到实现中就可以了。


推荐阅读