我有一個TypedMapper實用類,它可以:接受T或陣列<T>甚至不與聯盟類型工作
- 類型
T
- 散列陣列的散列/字典輸入/字典鍵入
T[]
從流量的角度來看,它看起來是這樣的:
,並使這些二元結構作爲輸入/輸出,我有以下的地圖()函數:
public map() {
return Array.isArray(this._inputData)
? this._inputData.map((item: T) => this.convert(item)) as T[]
: this.convert(this._inputData) as T;
}
的TypedMapper級工作正常,但是當我使用它,我想它的地圖( )函數返回離散類型T
或T[]
不是這兩種類型的聯合。例如,在下面的單元測試,我們得到成功JS導致但的類型不知道是T
或T[]
:
const config = {
passThroughs: ['foo', 'bar', 'baz'],
defaults: {
foo: 12345
}
};
const data = {
bar: 'hello world'
};
interface IFooBarBaz {
foo: number;
bar: string;
baz: string;
}
const mapped = new TypedMapper<IFooBarBaz>(data, config).map();
expect(mapped.foo).to.equal(12345);
expect(mapped.bar).to.equal('hello world');
expect(Object.keys(mapped)).to.include('baz');
expect(mapped.baz).to.equal(undefined);
如下面的截圖所示:
燦任何人都可以幫助我理解如何確保 - 基於輸入結構是否是數組 - 輸出數據結構是已知的離散數據結構?
顯式類型轉換那種違背了泛型類型,我的目的看看你建議的外部類型守護進程是如何工作的,但是它出現在我不希望避免的不必要的運行時條件下。隱含地理解現有的_內部類型守衛沒有辦法嗎? – ken