我有一个文件extensions/array.ts
,其中包含以下代码:
Array.prototype.randomPick = function() {
return this[Math.floor(Math.random() * this.length)];
};
还有一个extensions/string.ts
:
String.prototype.capitalizeFirstLetter = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
};
这些内容来自helpers/name-helper.ts
:
import '../extensions/string';
import '../extensions/array';
declare global {
interface Array<T> {
randomPick(): T;
}
interface String {
capitalizeFirstLetter(): string;
}
}
export default class NameHelper {
static generate() {
const adjetives = ['creepy', 'dark', 'desolate', 'bloody', 'green', 'dangerous', 'terrible', 'cold', 'windy', 'cozy'];
const places = ['meadows', 'hills', 'desert', 'dungeons', 'forest', 'cavern', 'underworld', 'town', 'city', 'castle', 'tower', 'house'];
return adjetives.randomPick().capitalizeFirstLetter() + ' ' + places.randomPick().capitalizeFirstLetter();
}
};
我必须在declare global
中加入interface Array<T>
和name-helper
,因此打字稿不会抱怨Array.randomPick()
不存在,但这意味着我&#39} ; d最终复制并粘贴我使用它的所有数组的接口声明...
我在代码中的其他地方window
遇到了同样的问题,并且interface CanvasRenderingContext2D
也遇到了问题,所以我可以看到这将成为未来的问题。
有没有办法将interface Array<T>
声明移到array.ts
?
我使用的是Typescript 2.0.3