[英]What is the TypeScript equivalent of "PropTypes.oneOf" (restrict a variable to subset of values)
在 React 中,我可以將變量限制為值的子集,例如
PropTypes.oneOf(['Home', 'About']),
我如何在 TypeScript 中執行此操作?
PS:我沒有在 React 中使用 TypeScript。
您可以通過定義聯合類型來組合靜態字符串(或任何常規類型):
type SomeType = 'Home' | 'About';
或在接口內:
interface SomeType {
prop : 'Home' | 'About';
}
當然,您也可以組合其他類型:
type SomeType = string | boolean;
您可以使用enum
。
枚舉允許我們定義一組命名常量。 使用枚舉可以更輕松地記錄意圖,或創建一組不同的案例。
enum PostStatus {
DRAFT = "DRAFT",
READY = "READY",
PUBLISHED = "PUBLISHED",
}
class Post {
constructor(private status: PostStatus) {
this.status = status;
}
}
const myPost = new Post(PostStatus.DRAFT);
console.log(myPost);
function doStuff(postStatus: PostStatus) {
switch (postStatus) {
case PostStatus.DRAFT:
console.log('Still working on it');
break;
case PostStatus.PUBLISHED:
console.log('Done.');
break;
default:
console.log('Other ...');
}
}
type PostStatus = "DRAFT" | "READY" | "PUBLISHED";
class Post {
constructor(private status: PostStatus) {
this.status = status;
}
}
const myPost = new Post("DRAFT");
console.log(myPost);
function doStuff(postStatus: PostStatus) {
switch (postStatus) {
case "DRAFT":
console.log('Still working on it');
break;
case "PUBLISHED":
console.log('Done.');
break;
default:
console.log('Other ...');
}
}
幾種類型中只有一種類型是聯合類型,在您的情況下是字符串文字的聯合。
您可以將字符串文字數組轉換為字符串文字的並集,如下所示:
如果你有一個 const 數組或字符串,你可以定義一個類型:
const menuList = ["Home", "About"] as const;
type menuName = typeof menuList[number] // "Home" | "About"
type menuList = ["Home", "About"];
type menuItem = menuList[number] // "Home" | "About"
這是一個使用枚舉類型、反應道具類型和 typescript 道具的解決方案
export enum AppPage {
Home = 'Home',
About = 'About',
}
export MyComponentProps = {
page: AppPage
}
export MyComponentPropTypes = {
page: PropTypes.oneOf<AppPage>(Object.values(AppPage)).isRequired
}
export MyComponent = (props:MyComponentProps) => {
return <div></div>
}
MyComponent.propTypes = MyComponentPropTypes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.