首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Pick属性偏于

如何使Pick属性偏于
EN

Stack Overflow用户
提问于 2019-02-25 12:36:57
回答 1查看 1.2K关注 0票数 1

我有这个功能

代码语言:javascript
复制
function someThing(someArg: Pick<HTMLElement, 'id' | 'style'>) {...}

但是,我只想向someArg.style添加一些样式,而不是CSSStyleDeclaration中的所有样式。否则,该函数的输入将是巨大的。

所以我希望像Pick一样的东西来自Partial<CSSStyleDeclaration>而不是来自CSSStyleDeclarationPick

我怎么能这么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-25 12:46:21

由于您的类型比Pick从现有类型中提取一些属性要复杂得多,因此您可能需要在它自己的接口中详细说明:

代码语言:javascript
复制
interface SomeArg {
  id: HTMLElement['id'],
  style: Partial<HTMLElement['style']>
}

function someThing(someArg: SomeArg) { }

someThing({id: "id", style: {
  zIndex: "1"
}})

我使用查找类型来明确表示idstyle属性与来自HTMLElement的属性相关,但您可以只使用stringPartial<CSSStyleDeclaration>

如果您确实需要使用像Pick这样的允许子属性为Partial的东西,您可以创建一个映射类型来完成它,但是我无法从您的问题中看出是否需要编程的东西。

更新

我想您确实希望它是可编程的(尽管对于两个属性,我本人不会费心),所以这里有一种定义PickPartial的方法,这样您就可以从Partial属性中选择而不是属性本身。我假设您不需要它是递归的(您不需要每个子属性本身就是Partial):

代码语言:javascript
复制
type PickPartial<T, K extends keyof T> = {[P in K]: Partial<T[P]>};

function someThing(someArg: PickPartial<HTMLElement, 'id'|'style'>) { }
someThing({id: "1", style: {
  zIndex: "1"
}})

注意,虽然这在技术上使id成为Partial<string>类型,但这很好,因为映射的类型不会修改原语。Partial<string>就是string。因此,someArg的类型与我前面描述的SomeArg接口相同。

希望这能有所帮助。祝好运!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54866382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档