Объявление метода расширения в Angular 6 - PullRequest
0 голосов
/ 11 сентября 2018

Я пришел из C # фона и пытаюсь найти эквивалент в реализации методов расширения для типов.Я использую Angular 6, но мне кажется, что это может быть и вопрос с машинописью.

Я объявил новый файл в своем приложении:

// myExtensions.ts

import { TypeToExtend } from 'path_to_type';

declare module 'path_to_type' {
  interface TypeToExtend {
    newMethod(): string;
  }
}

TypeToExtend.prototype.newMethod = function(): string {
  return this.Whatever + ' Hello World';
};

И в одном из моих сервисовЯ использую его следующим образом:

typeToExtendObject.newMethod();

newMethod () очень хорошо отображается в intellisense кода VS, однако при запуске приложения я вижу ошибку:

"typeToExtendObject.newMethod () не является функцией "

Должен ли я как-то добавить это в мои модули?Я не экспортирую этот модуль расширений правильно?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Это становится беспорядочным, главным образом потому, что большая часть информации о вашем типе исчезает после компиляции.Вы могли бы написать функцию, которая принимает объект (экземпляр) и наполняет этот объект методом:

interface NewMethodable {
    newMethod(): string;
}
addExtension<T>(obj: T): T & NewMethodable {
    obj.newMethod = function ...;  // edited from original answer
    return <T & NewMethodable>obj;
}

Это очень сложно, так что, вероятно, есть ошибки.

0 голосов
/ 11 сентября 2018

Просто используйте export class, тогда ваш класс будет виден, и import там, где вы хотите его использовать.даже класс может быть static, чтобы не использовать экземпляр.

export class User {
  id: number;
  name: string;
  car: Car;

  newFunction(){
    //TODO
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...