打字稿:类型交集和类型别名

时间:2017-01-26 17:10:38

标签: typescript typing

使用 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;

有什么想法吗?

1 个答案:

答案 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'
}));