Csv*_*svn 2 decorator web-component typescript
有没有一种方法可以验证Typescript中装饰的属性的类型?我想要一个仅适用于boolean类属性,而不适用于例如string(下面的示例)的属性装饰器。这可能吗?
(注意:我不希望通过reflect-metadata进行运行时验证,而只是使用Typescript进行编译类型警告。)
function booleanProperty<T extends HTMLElement>(target: T, prop: string) {
// `target` will be the class' prototype
Reflect.defineProperty(target, prop, {
get(this: T): boolean {
return this.hasAttribute(prop);
},
set(this: T, value: boolean): void {
if (value) {
this.setAttribute(prop, '');
} else {
this.removeAttribute(prop);
}
}
});
}
class MyElement extends HTMLElement {
@booleanProperty
foo: boolean;
@booleanProperty
bar: string; // TS compile error
}
customElements.define('my-element', MyElement);
Run Code Online (Sandbox Code Playgroud)
那这个呢?
function booleanProperty<
T extends HTMLElement & Record<K, boolean>,
K extends string>(target: T, prop: K) {
// ... impl here
}
Run Code Online (Sandbox Code Playgroud)
传递的对象target必须是一个在键处HTMLElement具有boolean属性的K,K传递对象的类型在哪里prop。让我们看看它是否有效:
class MyElement extends HTMLElement {
@booleanProperty // okay
foo: boolean;
@booleanProperty // error
bar: string;
}
Run Code Online (Sandbox Code Playgroud)
对我来说看上去很好。那对你有用吗?
| 归档时间: |
|
| 查看次数: |
446 次 |
| 最近记录: |