如何在Typescript中表示任意类型的值? 例如: 上面的代码有行为相同first instanceof second ,但我想不出什么类型的second必须使这项工作。 这个问题与打字稿中的“类”是否有类型有关? “任何”包括它吗? 但没有一个答案适用于具有私有构造函数的类(例如Loc ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有一个带有两个键的配置对象的函数。 这些值是对象中键的数组。
Config
类型的a
值将从类型T
的对象中删除,但是b
值需要以仅对字符串值键有效的某种方式进行转换。
结果是一个将类型T
作为显式参数的函数,并返回一个对类型T
的对象进行转换的函数:
interface Config<T extends Object, K extends keyof T> {
a?: K[] // keys to remove from T, this works fine
b?: K[] // keys to modify string value - want to constrain these
}
export function f<T extends Object>(config: Config<T, keyof T>): (row: T) => Partial<T> {
return function (row) {
// remove keys from config.a
// do something stringy with keys from config.b
}
}
叫做:
const fn = f<SomeType>({ a: [...], b: [...] })
有什么方法可以将Config
接口中的b
限制为仅字符串值的键? 我尝试了所有可能想到的方法,但尝试的大多数方法都产生了语法错误。 我现在正在通过将字符串值强制转换为string来解决此问题,因为类型系统不知道它们是字符串。 有一个更好的方法吗?
如果您不需要跟踪要删除/添加的键的实际并集,则可以从Config
删除K
参数。 从您的示例中,我认为这不是必需的。
要只获取某种类型的键,我们可以使用条件类型和映射类型:
interface Config<T extends Object> {
a?: (keyof T)[] // keys to remove from T, this works fine
b?: KeyOfValueType<T, string>[] // keys to modify string value - want to constrain these
}
type KeyOfValueType<T, TValue> = {[P in keyof T]: T[P] extends TValue ? P : never}[keyof T];
export function f<T extends Object>(config: Config<T>): (row: T) => Partial<T> {
return function (row) {
return null as any;
}
}
interface SomeType {
nr: number;
str: string
}
const fnOk = f<SomeType>({ a: ['nr'], b: ['str' ] })
const fnNok = f<SomeType>({ a: ['nr'], b: ['str', 'nr'] })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.