首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript:自动完成但禁用推理

TypeScript:自动完成但禁用推理
EN

Stack Overflow用户
提问于 2022-08-29 08:40:07
回答 3查看 64关注 0票数 2

假设我们有一种类型:

代码语言:javascript
复制
type A = {
  a1?: string;
  a2?: number;
  a3?: boolean;
}

以及用于自动完成的具有此类型的变量:

代码语言:javascript
复制
const b: A = {
  a1: "test";
}

b现在有了A类型,但我想推断出这种类型:

代码语言:javascript
复制
type B = {
  a1: string;
}

有可能吗?

我需要创建具有以下签名的函数:

代码语言:javascript
复制
type A = {
  a1?: string;
  a2?: number;
  a3?: boolean;
}

const b = build<A>(() => {
  return {
    // autocompletion from type A should works
    a1: string;
  }
});

b的类型应该是:

代码语言:javascript
复制
type B = {
  a1: string;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-08-29 14:14:04

satisfies运算符合并到TS 4.9中,使用TS 4.9 (定于2022年11月)的简单方法是:

代码语言:javascript
复制
type A = {
  a1?: string;
  a2?: number;
  a3?: boolean;
}

const b = {
  a1: "test"
} satisfies A;

请参见:

票数 2
EN

Stack Overflow用户

发布于 2022-08-29 09:21:55

当我正确理解你的问题时,你想要这样做

操场前厅

代码语言:javascript
复制
type A = {
  a1?: string;
  a2?: number;
  a3?: boolean;
}

const b: A = {
  a1: "test"
}

function identityCheck<T = never>() {
  return <I>(input: I & T) => input as I;
}

const b1 = identityCheck<A>()({
  a1: "test"
})

// now only a1 is shown in auto-complete
b1.a1

另见:是否有一种方法可以使用带有可选键的类型记录接口,但随后将键具体化?

票数 1
EN

Stack Overflow用户

发布于 2022-08-29 09:59:24

基于TmTron答案,我创建了一个基于类的解决方案,因为我不喜欢赛跑的样子:

代码语言:javascript
复制
class SomeBuilder<S = never> {
  constructor() {}

  build<T>(callback: () => S & T) {
    return callback as () => T;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73526153

复制
相关文章

相似问题

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