Javascript 如何为现有全局函数提供TypeScript注释
我正在考虑向现有项目添加TypeScript类型注释。 我很难为一个非常简单的示例提供外部声明文件: 程序。ts: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
/// <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
听起来是正确的做法。太糟糕了,没有完整的类型安全。无论如何,回答得很好!