Aurelia ValidationRules.ensure с использованием TypeScript - PullRequest
0 голосов
/ 13 февраля 2019

У меня был проект Aurelia, который был создан с ES6 и Babel, и я пытаюсь преобразовать его в TypeScript.

В одной области кода у меня было что-то вроде этого:

tenant.js

import {ValidationRules} from 'aurelia-validation'
export class Tenant{
    constructor(tenantObject){
        Object.assign(this, tenantObject);
    }
} 

ValidationRules
  .ensure(o => o.name).displayName("Tenant Name").required()
  ...
  .on(Tenant);

system.js (ВМ)

import {ValidationController} from 'aurelia-validation'
import {NewInstance} from 'aurelia-framework'
import {Tenant} from '../models/tenant'
import {BootstrapValidationRenderer} from 'elements/bootstrap-validation-renderer'

export class System{
    static inject = [DataService, NewInstance.of(ValidationController)]
    constructor(dataService, validationController){
       this.dataService = dataService
       this.validationController = validationController

       this.validationController.addRenderer(new BootstrapValidationRenderer())
    }

    async activate() {
       let data = await this.dataService.getTenant(1);
       this.tenant = new Tenant(data);
    }

    ...
}

system.html

...
<div class="form-group name" >
   <label for="pName" class="form-control-sm">Tenant Name</label>
   <input id="pName" type="text" autofocus class="form-control form-control-sm" value.bind="tenant.name & validate" />
</div>

Однако теперь я получаю сообщение об ошибке tenant.ts о том, что property 'name' does not exist on type {}.

Я пытался добавить свойство name к Tenant, но это не помогло..

Есть ли способ обойти это?

1 Ответ

0 голосов
/ 13 февраля 2019

Кажется, что aurelia-validation не не набирает текст.Следовательно, вы должны утверждать типы как:

ValidationRules
  .ensure((o: Tenant) => o.name).displayName("Tenant Name").required()
  ...
  .on(Tenant);

Но перед этим вы должны добавить свойство name к Tenant классу:

export class Tenant{
    public name: string = ''

    constructor(tenantObject){
        Object.assign(this, tenantObject);
    }
} 

PS fwiw, даже если aurelia-validation имелтипизации, вам все равно придется утверждать тип, потому что он принимает имя класса в самом конце цепочки методов.

...