使用 Typescript 2.1.4 ,在使用交集类型(type1 & type2
)并输入别名(type Something<T> = ...
)时遇到了一些奇怪的编译问题。
解释我试图实现的目标:我只是想声明一个类型别名,它表示某些已定义对象值(在本例中为id
类型的属性string
)和自定义的交集其他属性,所有属性都是可选的。
此类型使用 Typescript 预定义的Partial
类型别名。
以下代码编译并运作:
export type StoreModelPartial<T> = {id:string} & T;
function test<T>(obj:StoreModelPartial<T>) {
console.log('TEST', obj);
}
console.log(test({
'id':'value',
'something':'value2'
}));
但是当我尝试使用Partial
类型别名时,我收到编译错误:
export type StoreModelPartial<T> = Partial<{id:string} & T>;
function test<T>(obj:StoreModelPartial<T>) {
console.log('TEST', obj);
}
console.log(test({
'id':'value',
'something':'value2'
}));
我收到此错误:
类型&#39; {&#39; id&#39;:字符串; &#39;某事&#39;:字符串; }&#39;不是 可分配给&#39; Partial&lt; {id:string; }&amp; T&GT;
有什么想法吗?
答案 0 :(得分:1)
忘了它,我想我通过写这个问题来解决这个问题......并重新阅读我的代码示例的错误信息,这比我最初打架的更复杂的部分更清晰。
我认为交叉和延伸有些相同,但不是。我需要的是extends
:
export type StoreModelPartial<T extends {id?:string}> = Partial<T>;
function test<T>(obj:StoreModelPartial<T>) {
console.log('TEST', obj);
}
console.log(test({
'id':'value',
'something':'value2'
}));