回答

2

使用打字稿2.1keyof功能我已经想通了以下类型声明(基于SimpleChanges),这似乎给我们必要的类型访问组件的属性:

export type ComponentChange<T, P extends keyof T> = { 
    previousValue: T[P]; 
    currentValue: T[P]; 
    firstChange: boolean; 
}; 

export type ComponentChanges<T> = { 
    [P in keyof T]?: ComponentChange<T, P>; 
}; 

使用这些声明vscode编辑器自动获取类型信息并自动完成更改属性:

enter image description here

虽然一个问题是,更改参数现在将列出组件的每个属性(而不仅仅是@Input()属性),但我没有找到比这更好的方法。

+1

我不知道你贴的权利网站上... – trichetriche

+0

使用继承即使你可以迭代所有的输入,并不是所有的输入都可能必然发生变化。扩展简单更改界面将显示组件期望更改的输入。无论如何,只是我的2美分。 – Ashg

1

我使用继承来解决问题。首先,我创建了扩展SimpleChange类的类型化接口。您只需要执行一次并将其导入需要它的组件。

interface TypedChange<T> extends SimpleChange 
{ 
    previousValue: T; 
    currentValue: T; 
} 

第二,我们扩展SimpleChanges接口,使其中的元件有望改变。例如

interface MyComponentChanges extends SimpleChanges 
{ 
    RefreshQueue: TypedChange<number> 
} 

最后实现是

public ngOnChanges(changes: MyComponentChanges): void 
{ 
    if (changes.RefreshQueue) 
    { 
     if (!changes.RefreshQueue.isFirstChange()) 
     { 
      if (changes.RefreshQueue.currentValue == 1) 
      { 
       DoSomething(); 
      } 
     } 
    } 
} 

智能感知屏幕截图如下

enter image description here

相关问题