簡體   English   中英

如何為現有的全局函數提供TypeScript批注

[英]How to provide TypeScript annotation to existing global function

我正在考慮將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文件)中找到的代碼提供類型信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM