Я хочу реализовать polyfill Object.setPrototypeOf, как описано в:
Это мой polyfill.ts:
// Only works in Chrome and FireFox, does not work in IE:
Object.setPrototypeOf = Object.setPrototypeOf || function(obj, proto) {
obj.__proto__ = proto;
return obj;
}
polyfills.d.ts:
declare interface ObjectConstructor{
setPrototypeOf(obj: any, proto: any);
}
Я пробовал со многими возможностями polyfill.d.ts:
declare global {
export interface ObjectConstructor {
setPrototypeOf(obj: any, proto: any);
}
}
и все же у меня есть следующая ошибка:
[ts] Свойство setPrototypeOf не существует для типа ObjectConstructor. Вы имели в виду 'getPrototypeOf'? lib.es5.d.ts(164, 5): здесь объявляется 'getPrototypeOf'.
Я переношу довольно большое приложение на TypeScript 3.0.3, поэтому мне нужно реализовать полифилл.
Найденное решение:
Достаточно удалить polyfill и:
export class KnownError extends Error {
public isKnownError: boolean = true;
constructor(message: string) {
super(message);
this.message = message;
//good enough solution, transpiled to ES5
(<any>Object).setPrototypeOf(this, KnownError.prototype)
}
}
Подробнее: Typescript — расширение класса ошибок
polyfills.d.ts
, должно было сработать. Входит лиpolyfills.d.ts
в ваш файлtsconfig.json
? Если вы перейдете к определению наObjectConstructor
, появится ли меню, указывающее, что ваше объявление объединяется с объявлением в стандартной библиотеке? - person Matt McCutchen   schedule 20.09.2018declare var foo: any;
вpolyfills.d.ts
, а затем ссылаетесь наfoo
изpolyfill.ts
, разрешается ли ссылка в объявление? Возможно,polyfills.d.ts
не включен в ваш проект. - person Matt McCutchen   schedule 22.09.2018