React Typescript:导出包含枚举的类型
React Typescript: Exporting types containing enums
我有以下文件:
CarBrands.ts:
export enum CarBrands {
SAAB = "saab",
VOLVO = "volvo"
}
CarBrand.ts:
import {CarBrands} from "./CarBrands";
export type CarBrand = CarBrands.SAAB | CarBrands.VOLVO;
Car.ts:
import {CarBrand} from "./CarBrand";
export default interface Car {
brand: CarBrand;
}
默认Car.ts:
import Car from "./Car";
export const DefaultCar: Car = {
brand: "volvo"
};
在我导出“DefaultCar”的最后一个文件中,出现以下错误:TS2322: Type '"volvo"' is not assignable to type 'CarBrands'
尽管“brand”的类型应该是“CarBrand”而不是“CarBrands”。这是为什么?
我也试过export type CarBrand = typeof CarBrands.SAAB | typeof CarBrands.VOLVO;
,但这也没用。
我可能遗漏了一些明显的东西,但谷歌搜索对我一点帮助都没有。我做错了什么?
除非您的枚举中有更多条目并且您不希望在CarBrand
中使用它们,为什么不直接使用枚举?
此外,即使枚举是基于字符串的,您也不能在没有强制转换的情况下将字符串分配给 属性。相反,使用 CarBrands.VOLVO
import {CarBrands} from "./CarBrands";
export default interface Car {
brand: CarBrands;
}
import Car from "./Car";
export const DefaultCar: Car = {
brand: CarBrands.VOLVO
};
Simplified TypeScript Playground
如果您愿意,也可以只使用这样的字符串:
export type CarBrand = 'saab' | 'volvo';
在这种情况下,您对 'volvo'
的 属性 赋值会起作用,因为它是一个匹配字符串。
我有以下文件:
CarBrands.ts:
export enum CarBrands {
SAAB = "saab",
VOLVO = "volvo"
}
CarBrand.ts:
import {CarBrands} from "./CarBrands";
export type CarBrand = CarBrands.SAAB | CarBrands.VOLVO;
Car.ts:
import {CarBrand} from "./CarBrand";
export default interface Car {
brand: CarBrand;
}
默认Car.ts:
import Car from "./Car";
export const DefaultCar: Car = {
brand: "volvo"
};
在我导出“DefaultCar”的最后一个文件中,出现以下错误:TS2322: Type '"volvo"' is not assignable to type 'CarBrands'
尽管“brand”的类型应该是“CarBrand”而不是“CarBrands”。这是为什么?
我也试过export type CarBrand = typeof CarBrands.SAAB | typeof CarBrands.VOLVO;
,但这也没用。
我可能遗漏了一些明显的东西,但谷歌搜索对我一点帮助都没有。我做错了什么?
除非您的枚举中有更多条目并且您不希望在CarBrand
中使用它们,为什么不直接使用枚举?
此外,即使枚举是基于字符串的,您也不能在没有强制转换的情况下将字符串分配给 属性。相反,使用 CarBrands.VOLVO
import {CarBrands} from "./CarBrands";
export default interface Car {
brand: CarBrands;
}
import Car from "./Car";
export const DefaultCar: Car = {
brand: CarBrands.VOLVO
};
Simplified TypeScript Playground
如果您愿意,也可以只使用这样的字符串:
export type CarBrand = 'saab' | 'volvo';
在这种情况下,您对 'volvo'
的 属性 赋值会起作用,因为它是一个匹配字符串。