首页 > 解决方案 > 如何通过医生更改属性类型

问题描述

我有一个像这样的角度组件:

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 类中更改titlefromstring的类型boolean,但我不知道这是可能的。

在此代码中,我收到一个错误: 错误ss

你能告诉我如何做到这一点,或者是否有任何关于是否可以获得它的信息?

我在谷歌上没有找到任何关于它的信息。我只找到一个类装饰器来更改构造函数属性的类型,但这并不能解决我的问题。

您还可以在代码和框的这个演示中看到我的代码。

标签: angulartypescriptdecoratortypescript-decoratorangular-decorator

解决方案


我们可以更简单...

使用两种类型定义变量:

let variable:boolean | string;

在打字稿操场上检查它。:https ://www.typescriptlang.org/play?#code/DYUwLgBAbghgTgSxgI1ALmQe06GA7CAHwgGcxE8BzAbgChbZEVQIBeCcgVxDsaVRBsIAIjAgyw3vH4t2ARjl0gA


推荐阅读