首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Typescript:类型'string‘不能赋值给类型

Typescript:类型'string‘不能赋值给类型
EN

Stack Overflow用户
提问于 2021-11-04 22:04:29
回答 2查看 894关注 0票数 0

我有一个物体

代码语言:javascript
运行
复制
export const TOOLTIP_PLACEMENTS = Object.freeze({
  TOP: 'top',
  BOTTOM: 'bottom',
  LEFT: 'left',
  RIGHT: 'right',
});

和一个组件:

代码语言:javascript
运行
复制
type Props = {
  text?: string;
  children: React.ReactNode;
  placement?: keyof typeof TOOLTIP_PLACEMENTS;
};

const Tooltip = ({
  text,
  children,
  placement = TOOLTIP_PLACEMENTS.BOTTOM,
}: Props) => (
  <StyleTippy
    content={<TitleContainer>{text}</TitleContainer>}
    placement={placement}
    arrow={true}
  >
    {children}
  </StyleTippy>
);

然而,Typescript抱怨我给它发送了一个字符串文字

代码语言:javascript
运行
复制
src/components/Tooltip.tsx:41:3 - error TS2322: Type 'string' is not assignable to type '"TOP" | "BOTTOM" | "LEFT" | "RIGHT"'.

41   placement = TOOLTIP_PLACEMENTS.BOTTOM,
     ~~~~~~~~~

我该怎么解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-04 22:25:36

当您执行TOOLTIP_PLACEMENT.BOTTOM时,您将获得它的值,即bottom小写字符串值。但是keyof typeof TOOLTIP_PLACEMENT将为您提供密钥,即对象的大写密钥:BOTTOM | TOP | RIGHT | LEFT。不是字符串而是联合类型的。为了获得键的值,您可以像这样定义一个放置类型:type Placement = typeof TOOLTIP_PLACEMENTS[keyof typeof TOOLTIP_PLACEMENTS];,它返回所选键的值。但是,这取决于StyleTippy期望的属性。我会按照前面定义的那样为它分配Placement类型。

票数 1
EN

Stack Overflow用户

发布于 2021-11-04 22:22:41

因为它们都是字符串,所以只需要改变你的道具类型,这样放置就是字符串。当您使用TOOLTIP_PLACEMENTS.BOTTOM时,您使用的是bottom的值,它是一个字符串,所以这正是放置属性所期望的。

代码语言:javascript
运行
复制
type Props = {
  text?: string;
  children: React.ReactNode;
  placement?: string;
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69846349

复制
相关文章

相似问题

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