如何键入任意对象或其键作为方法参数

问题描述 投票:0回答:1

我一直在尝试键入递归序列化任意对象的输入法。我已经使用了映射类型,通用参数,递归类型(例如JSON类型),但没有任何运气):

这是我试图摆脱参数中的any的方法:

export function serialize(data: any) {
  if (data === null) {
    return '';
  }

  if (typeof data === 'object') {
    let serializedData = '';
    for (const k of Object.keys(data).sort()) {
      serializedData += k;
      if (data[k] !== null) {
        serializedData += serialize(data[k]);
      }
    }
    return serializedData;
  }

  return data.toString();
}
typescript
1个回答
0
投票

您需要自定义类型防护,以将值优化为Record<string, unknown>

const isUnknownRecord = (u: unknown): u is Record<string, unknown> =>
  typeof u === 'object' && u !== null

export function serialize(data: unknown): string {
  if (data === null) {
    return ''
  }

  if (isUnknownRecord(data)) {
    let serializedData = ''
    for (const k of Object.keys(data).sort()) {
      serializedData += k
      if (data[k] !== null) {
        serializedData += serialize(data[k])
      }
    }
    return serializedData
  }

  return String(data)
}

© www.soinside.com 2019 - 2024. All rights reserved.