繁体   English   中英

在 TypeScript 中生成一个 const 类型的 object

[英]Generate a const typed object in TypeScript

我正在尝试通过传入一个我想用作类型的字符串来生成一个const类型的 object,这可能吗,我已经尝试了下面的方法,它带出了错误的类型。

const test = <T> (name: T) => {
  const hi: { name: T } = {
    name
  } as const
  return hi
}

const test1 = test('hello')

我希望这是类型

{
    name: 'hello';
}

但相反,它是类型

{
    name: string;
}

为了推断参数的文字类型,通常需要为泛型参数添加适当的约束。 看这个例子:

function test<T extends string>(name: T) {
  return { name };
}

const test1 = test('hello') // {name:"hello"}

如果您对更多示例感兴趣,可以查看我的文章

如果要添加一些验证,可以使用条件类型:

type IsHello<T extends string> = T extends 'hello' ? T : never

function test<T extends string>(name: IsHello<T>) {
  return { name };
}

const test1 = test('hello') // {name:"hello"}
const test2 = test('not a hello') // expected error

或者您可以使用此实用程序类型:

type IsLiteral<T extends string> = T extends string ? string extends T ? never : T : never

function test<T extends string>(name: IsLiteral<T>) {
  return { name };
}

如果您只想允许字符串文字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM