簡體   English   中英

如何定義一種類型,使其只需要實現另一個接口的一個屬性

[英]How to define an type such that it only needs to implement one property of another interface

如果我有一個界面:

interface ITest {
    a: number;
    b: string;
}

我想實現一個接口,這樣 function 需要接受一個 object ,其中只包含接口屬性的一些定義子集,例如對於上面的例子,它可能只需要接受a . 我嘗試了以下方法:

type WithOnly<T, K extends keyof T> = {
    [K in keyof T]: T[K];
}

export const f = (x: WithOnly<ITest, 'a'>) => settings.a * 2;

但是編譯器似乎不喜歡這樣; 它希望x也有b 有沒有辦法實現這個?

你很接近,因為你只想要K中指定的屬性,你應該做[P in K]: T[P];


type WithOnly<T, K extends keyof T> = {
    [P in K]: T[P];
}

或者更好的是只使用Pick<ITest, 'a'> ,它已經做了你想做的事情:

interface ITest {
    a: number;
    b: string;
}
export const f = (x: Pick<ITest, 'a'>) => x.a * 2;

f({ a: 1 })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM