В настоящее время я работаю над API TypeScript, который требует некоторых дополнительных функций, связанных с прототипом Object (Object.prototype).
Рассмотрим следующий код:
class Foo {
}
interface Object {
GetFoo(): Foo;
GetFooAsString(): string;
}
//This is problematic...
Object.prototype.GetFoo = function() {
return new Foo();
// Note, this line is just for testing...I don't want my function to just return a blank instance of Foo!
}
//This is ok.
Object.prototype.GetFooAsString = function () {
return this.GetFoo().toString();
}
Возможно, вы захотите попробовать это прямо на Playground.
Как вы можете видеть, у меня есть класс под названием Foo
(а не фактическое имя объекта, которое я буду использовать). Я также расширил интерфейс Object
, чтобы включить две новые функции. Наконец, я реализовал функции против prototype
(эти работы в чистом JavaScript, это просто TypeScript, который жалуется).
Где я записал аннотацию "//это проблематично..." TypeScript выделяет это с красным squiggly и показывает следующую ошибку:
Cannot convert '() => Foo' to '{ (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; }': Call signatures of types '() => Foo' and '{ (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; (): Foo; }' are incompatible
() => Foo
Либо это всего лишь ошибка TypeScript (я знаю, что она все еще находится на стадии разработки, поэтому многие ошибки нуждаются в проглатывании, и я уже проиллюстрировал некоторые из них на CodePlex), или, что-то не хватает.
Почему я получаю эту проблему?
Если это не ошибка TypeScript, как я могу это исправить?