如何在typescript中使用或与变量一起使用



我有这个代码:

size?: 'standart' | 'large';

然后我做了常数,比如:

export const INPUT_SIZE_LARGE: string = 'large';
export const INPUT_SIZE_STANDART: string = 'standart';

但这不起作用:

size?: INPUT_SIZE_LARGE | INPUT_SIZE_STANDART;

为什么?我该怎么处理?

首先需要删除类型string,因为它强制TypeScript将类型从'large'扩展到string。其次,您需要使用typeof关键字。JavaScript和TypeScript有不同的关键字typeof。在Typescript中,它从值中提取类型。

这是工作代码:

export const INPUT_SIZE_LARGE = 'large';
export const INPUT_SIZE_STANDART = 'standart';
type A = {
size?: typeof INPUT_SIZE_LARGE | typeof INPUT_SIZE_STANDART;
}

以下是TS操场的工作代码:https://www.typescriptlang.org/play?ssl=6&ssc=2&pln=1&pc=1#代码/KYDWg9gTgLgBAYwgOwM7wJIDkAKBVAFQH0BlDALFEiAZAQQCUBxSuAXjgHIAbAQygDmwTgG4AUKEixEKdHGz5iZKqQJ0sAEUYF2XdL2QATfjFFixMAJ5hgcOroDeYuHFQBLAF7AA-AC44VjYQAGbyuISkFNT0zKwAPgHWCFhipEqJGqa2uIAvkA

如果我理解正确,那么您正在为类型赋值。这是不合适的。

export const INPUT_SIZE_LARGE = 'large';
export const INPUT_SIZE_STANDART = 'standart';
type size = typeof INPUT_SIZE_LARGE | typeof INPUT_SIZE_STANDART;

但这会起作用的

错误消息解释了错误:

'INPUT_SIZE_LARGE'指的是一个值,但在此处用作类型。你的意思是"INPUT_SIZE_ARGE类型"吗?(2749(

除此之外,您将显式地将常量键入为string,但如果您希望它们是可以用于size的字符串文字类型,则需要让它们是字符串文字类型而不是strings。

所以去掉:string加上typeof就解决了这个问题:

export const INPUT_SIZE_LARGE = 'large';
export const INPUT_SIZE_STANDART = 'standart';
interface X {
size?: typeof INPUT_SIZE_LARGE | typeof INPUT_SIZE_STANDART;
}

游乐场链接

我以为你可能也需要as const,但你没有。

最新更新