我想检查一下我创建的对象是否符合某个界面但我还想保持原始类型不变。
我知道我可以使用立即调用的函数表达式来实现这一点,如此...
interface MustHaveThingy {
thingy: any;
}
const originalType = (function<T extends MustHaveThingy>(obj: T) {return obj;})({
thingy: 'something',
somethingElse: 'this is part of the type',
});
originalType
的类型输入为{thingy: string; somethingElse: string;}
,但仍符合接口MustHaveThingy
。
......但它有点难看。有没有办法在没有立即调用的函数表达式的情况下实现上述目的?
我正在寻找的是整个 - T extends SomeOtherType
,其中T
的实际类型被推断,但T
必须符合SomeOtherType
- 但没有函数。
答案 0 :(得分:1)
您可以在单独的声明中使用as
。
interface MustHaveThingy {
thingy: any;
}
const originalType = {
thingy: 'something',
somethingElse: 'this is part of the type',
};
originalType as MustHaveThingy; // <- assertion
删除thingy: 'something'
行会产生:
foo.ts(9,1):错误TS2352:输入&#39; {somethingElse:string; }&#39;无法转换为类型&#39; MustHaveThingy&#39;。 财产&#39; thingy&#39;类型&#39; {somethingElse:string; }&#39;