angular - 如何通过医生更改属性类型
问题描述
我有一个像这样的角度组件:
import { Component, OnInit } from "@angular/core";
function ConvertToBoolean<T extends object, K extends keyof T>() {
return (target: Object, key: string): void => {
Object.defineProperty(target, key, {
set(this: T, initialValue: T[K] | K) {
let currentValue = initialValue;
Object.defineProperty(this, key, {
get(): boolean {
return !!currentValue;
},
set(this: T, value: T[K]) {
currentValue = value;
}
});
}
});
};
}
@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.css"]
})
export class AppComponent implements OnInit {
@ConvertToBoolean()
title: string = "CodeSandbox";
ngOnInit() {
console.log(this.title);
this.title = false; // error
this.title = "false"; // pass
}
}
如您所见,ConvertToBoolean
装饰器正在将任何属性更改为布尔值。但我想在 AppComponent 类中更改title
fromstring
的类型boolean
,但我不知道这是可能的。
你能告诉我如何做到这一点,或者是否有任何关于是否可以获得它的信息?
我在谷歌上没有找到任何关于它的信息。我只找到一个类装饰器来更改构造函数属性的类型,但这并不能解决我的问题。
您还可以在代码和框的这个演示中看到我的代码。
解决方案
我们可以更简单...
使用两种类型定义变量:
let variable:boolean | string;