我有这个功能
[[ 0.06964055 -0.06541953 -0.00682676]]
[[ 0.005264 -0.03234607 0.00014838]]
[[ 1.617855e-04 -1.316892e-02 8.596722e-06]]
[[ 3.9425286e-06 -5.1347450e-03 7.5078127e-08]]
[[ 8.7508155e-08 -1.9560163e-03 6.3853928e-10]]
[[ 1.8867894e-09 -7.3784427e-04 5.8551406e-12]]
[[ 4.0385355e-11 -2.7728223e-04 5.3957669e-14]]
my imp
[[ 0.06964057 -0.06541953 -0.00682676]]
[[ 0.005264 -0.03234607 0.00014838]]
[[ 1.61785520e-04 -1.31689185e-02 8.59672610e-06]]
[[ 3.94252745e-06 -5.13474567e-03 7.50781122e-08]]
[[ 8.75080644e-08 -1.95601574e-03 6.38539112e-10]]
[[ 1.88678843e-09 -7.37844070e-04 5.85513438e-12]]
[[ 4.03853841e-11 -2.77282006e-04 5.39576024e-14]]
但是,我只想向function someThing(someArg: Pick<HTMLElement, 'id' | 'style'>) {...}
添加一些样式,而不是someArg.style
中的所有样式。否则,该函数的输入将是巨大的。
所以我希望有CSSStyleDeclaration
中的Pick
,而不是Partial<CSSStyleDeclaration>
中的Pick
我该怎么做?
答案 0 :(得分:2)
由于您的类型比仅仅Pick
从现有类型中添加一些属性要复杂得多,因此您可能希望在其自己的界面中将其拼写出来:
interface SomeArg {
id: HTMLElement['id'],
style: Partial<HTMLElement['style']>
}
function someThing(someArg: SomeArg) { }
someThing({id: "id", style: {
zIndex: "1"
}})
我正在使用lookup types来明确说明id
和style
属性与HTMLElement
中的属性相关,但是您只能使用{{1} }和string
。
如果您确实需要使用Partial<CSSStyleDeclaration>
之类的允许子属性为Pick
的东西,则可以使一个mapped type来做,但是我不能从您的问题中得知您是否需要一些编程的东西。
我想您确实希望它是编程的(尽管对于我自己不会打扰的两个属性),所以这是定义Partial
的一种方法,以便您从PickPartial
属性中进行选择属性本身。我假设您不需要递归(您不需要每个子属性本身就是Partial
):
Partial
请注意,尽管从技术上讲,这使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
接口的类型相同。
希望有帮助。祝你好运!