невозможно определить сигнатуру декоратора класса при вызове выражения - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь следовать этому примеру. Я не могу заставить его скомпилировать. Любые идеи о том, как решить проблему?

import { Component } from '@angular/core';

function log(className)
{
  console.log(className)

  return (...args) => {
    console.log("Arguments passed to this class's constructor are ", args)
    return new className(...args)
  }
}

@log
class myExampleClass
{
    constructor(arg1, arg2)
    {
      console.log("Constructor fired!")
    }
}

const myClass = new myExampleClass(5,10)

Я получаю ошибку.

Unable to resolve signature of class decorator when called as an expression.
  Type '(...args: any[]) => any' is not assignable to type 'typeof myExampleClass'.
    Type '(...args: any[]) => any' provides no match for the signature 'new (arg1: any, arg2: any): myExampleClass'.

1 Ответ

1 голос
/ 01 октября 2019

Декоратор класса применяется к конструктору класса и может использоваться для наблюдения, изменения или замены определения класса .

В вашем примере вы пытаетесь заменитьопределение класса. В этом случае вы должны вернуть тип того же класса, к которому применяется ваш @log декоратор.

function log<T extends { new(...args: any[]): {} }>(className: T) {
  console.log(className)
  return class extends className {
    constructor(...args) {
      super(...args);
      console.log("Arguments passed to this class's constructor are ", args)
    }
  }
} 

См. Также:

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