繁体   English   中英

Aurelia ValidationRules.ensure使用TypeScript

[英]Aurelia ValidationRules.ensure using TypeScript

我有一个用ES6和Babel创建的Aurelia项目,我正在尝试将其转换为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(VM)

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.tstenant.ts错误,指出property 'name' does not exist on type {}

我尝试向Tenant添加name属性,但这似乎无济于事。

有办法解决这个问题吗?

看来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即使aurelia aurelia-validation有类型,您仍然必须断言type,因为它在方法链的最后接受类名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM