Пользовательский класс String - PullRequest
0 голосов
/ 07 января 2019

Ищу 1-2 удара.

  1. Я бы хотел настроить пользовательские строки.
  2. Во время выполнения я хотел бы знать тип строки, отличный от простой строки.

Вот код:

class TZDatabaseName extends String {
  constructor(...args) {
    super(...args);
    return this;
  }
}

expect(new TZDatabaseName('Asia/Tokyo') instanceof String).toBeTruthy();
expect(new TZDatabaseName('Asia/Tokyo') instanceof TZDatabaseName).toBeTruthy();
expect(new TZDatabaseName('Asia/Tokyo')).toEqual('Asia/Tokyo');

Я бы хотел, чтобы все три проверки, указанные ниже, прошли.

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

export abstract class TZDatabaseName extends String {
  public static MAKE(s: string): TZDatabaseName {
    if (!s.match(/^\w+\/\w+$/)) throw new Error('invalid TZDatabaseName');
    return s as any;
  }
  private __TZDatabaseNameFlag;
}

1 Ответ

0 голосов
/ 07 января 2019

На самом деле, не обращайте внимания на мои предыдущие комментарии о том, что примитивный тип данных и объект различны, я только что сам это проверил, и все тесты прошли? ...

class TZDatabaseName extends String {
  constructor(...args) {
    super(...args);
    return this;
  }
}


describe('TZDatabaseName', function() {
  it('Instance of String', function() {
    expect(new TZDatabaseName('Asia/Tokyo') instanceof String).toBeTruthy();
  });

  it('Instance of TZDatabaseName', function() {
    expect(new TZDatabaseName('Asia/Tokyo') instanceof TZDatabaseName).toBeTruthy();
  });

  it('Equal to Primitive Type', function() {
    expect(new TZDatabaseName('Asia/Tokyo')).toEqual('Asia/Tokyo');
  });
});


describe('More TZDatabaseName', function() {
  it('Primitive Instance of TZDatabaseName', function() {
    expect(''
      instanceof TZDatabaseName).toBeFalsy();
  });

  it('Primitive Instance of String', function() {
    expect(''
      instanceof String).toBeFalsy();
  });

  it('String Instance of TZDatabaseName', function() {
    expect(String('') instanceof TZDatabaseName).toBeFalsy();
  });
});


// Jasmine htmlReporter
(function() {
  var env = jasmine.getEnv();
  env.addReporter(new jasmine.HtmlReporter());
  env.execute();
}());
<link rel="stylesheet" href="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.css" />
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine.js"></script>
<script src="https://cdn.jsdelivr.net/jasmine/1.3.1/jasmine-html.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...