首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确键入检查嵌套记录,允许使用TypeScript的部分子树?

如何正确键入检查嵌套记录,允许使用TypeScript的部分子树?
EN

Stack Overflow用户
提问于 2021-11-24 00:01:01
回答 1查看 178关注 0票数 0

请看下面的演示。

interface Data为嵌套数据定义了一个架构。

function check应该验证这个Data结构的一个给定的部分子树是否很好,如果不是,抛出一个编译时错误(希望有一个或多或少详细和可理解的错误消息,而不仅仅是“.不能指定输入‘从不”)。

代码语言:javascript
复制
interface Data {
  namespace1: {
    keyA: string,
    keyB: string
  },

  namespace2: {
    keyC: string,
    keyD: string
  }
}

// This function's only purpose is to perform a compile-time check
// whether the given partial data is valid.
// Returns the first and only argument in case of success,
// otherwise a compile-time error will occur.
function check<??>(
  partialData: ????
): ?????? {
  return partialData
}

// Example 1 => okay
const validPartialData1 = check({
  namespace1: {
    keyB: 'b'
  }
})

// Example 2 => okay
const validPartialData2 = check({
  namespace1: {
    keyB: 'b'
  },

  namespace2: {
    keyC: 'c'
  }
})

// Example 3 => okay
const validPartialData3 = check({})

// Example 4 => compile-time error!
const invalidPartialData1 = check({
  namespace1: {
    keyC: 'c'
  }
})

// Example 5 => compile-time error!
const invalidPartialData2 = check({
  xyz: {
    keyA: 'a'
  }
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-24 01:24:39

您不需要check函数。直接使用可选字段。

代码语言:javascript
复制
interface Data {
  namespace1?: {
    keyA?: string,
    keyB?: string
  },

  namespace2?: {
    keyC?: string,
    keyD?: string
  }
}

const validPartialData1:Data = {
  namespace1: {
    keyB: 'b'
  }
}

请参阅游乐场

如果您不想更改Data类型。您可以定义另一个PartialData

代码语言:javascript
复制
type NestPartial<T> = {
    [P in keyof T]?: NestPartial<T[P]>;
}
type PartialData = NestPartial<Data>

const validPartialData1: PartialData = {
    namespace1: {
        keyB: 'b'
    }
}

请参阅游乐场

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

https://stackoverflow.com/questions/70089277

复制
相关文章

相似问题

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