我正在考虑将TypeScript类型注释添加到现有项目。
我在为一个非常简单的示例提供外部声明文件时遇到了麻烦:
program.ts:
/// <reference path="types.d.ts"/>
function greet (p) {
console.log(p.name);
}
var x = {name: 'Mary'};
greet(x);
types.d.ts:
interface Person {
height?: number,
name: string
}
declare function greet (p: Person): void;
我希望这能正常工作,但出现以下错误:
program.ts(3,10): error TS2384: Overload signatures must all be ambient or non-ambient.
似乎认为函数定义是重载,而不是先前声明的实现。
向
greet
函数添加类型的正确方法是什么?要求:
program.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
文件)中找到的代码提供类型信息。关于javascript - 如何为现有的全局函数提供TypeScript批注,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37530898/