![](/img/trans.png)
[英]How to provide global TypeScript classes via WebPack bundle in JS
[英]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.