Javascript 如何为现有全局函数提供TypeScript注释

Javascript 如何为现有全局函数提供TypeScript注释,javascript,typescript,Javascript,Typescript,我正在考虑向现有项目添加TypeScript类型注释。 我很难为一个非常简单的示例提供外部声明文件: 程序。ts: /// <reference path="types.d.ts"/> function greet (p) { console.log(p.name); } var x = {name: 'Mary'}; greet(x); interface Person { height?: number, name: string } decla

我正在考虑向现有项目添加TypeScript类型注释。 我很难为一个非常简单的示例提供外部声明文件:

程序。ts

/// <reference path="types.d.ts"/>

function greet (p) {
    console.log(p.name);
}

var x = {name: 'Mary'};

greet(x);
interface Person {
    height?: number,
    name: string
}

declare function greet (p: Person): void;
我原以为这会起作用,但我发现以下错误:

program.ts(3,10):错误TS2384:重载签名必须全部是环境或非环境签名。

它似乎认为函数定义是一个重载,而不是以前声明的实现

greet
函数添加类型的正确方法是什么


要求:程序.ts应该是纯JavaScript,例如,没有任何类型注释。

这是该语言不支持或不允许的。基本上,代码正在执行

interface Person {
    height?: number,
    name: string
}

declare function greet(p: Person): void;

function greet(p: any): void {
    console.log(p.name);
}
因此,使用相同的名称定义函数和环境函数时会出现错误

向greet函数添加类型的正确方法是什么

要做到这一点:

interface Person {
    height?: number,
    name: string
}

function greet(p: Person): void {
    console.log(p.name);
}
要求:program.ts应该是纯JavaScript,例如,没有任何类型注释

如果不更改program.ts中的代码,这是不可能的。一种可能是将program.ts更改为program.js,然后使用声明文件描述program.js,以便在其他文件中使用。这只意味着其他使用program.js的文件可以从了解该文件的类型和结构中获益,但这并不能阻止您在program.js中犯错误


请注意,定义文件的主要目的是为
.js
文件中的代码提供类型信息,而不是
.ts
文件。

描述
程序.js
,而不将扩展名更改为
。考虑到我试图扩展现有的代码库,ts
听起来是正确的做法。太糟糕了,没有完整的类型安全。无论如何,回答得很好!