我很难弄清楚这里出了什么问题:

export type PackageLanguage = "de" | "en";
export interface ICookieConsentProps {
    language?: PackageLanguage ;
}

function CookieConsent({ language }: ICookieConsentProps) {
    useEffect(() => {
        LanguageHelper.setLanguageFile(language || "en"); <--- PROBLEM HERE !
    }, [language]);

    return <div className="cc__gimme-cookies"></div>;
}

CookieConsent.defaultProps = {
    language: "en",
} as Partial<ICookieConsentProps>;

我想在一些函数中使用language属性.为什么TypeScript会忽略我为语言属性设置的DefaultProp,并让我判断未定义的属性?

LanguageHelper.setLanguageFile(language);

LanguageHelper.setLanguageFile(language || "en");

提前谢谢你的建议!

亲切的问候,

推荐答案

因为language是可选的,所以很可能是未定义的.

你可以把PickRequired个效用函数结合起来,得到你需要的结果.

export type PackageLanguage = "de" | "en";
export interface ICookieConsentProps {
    language?: PackageLanguage;
    otherProp: string;
    propNotInterestedIn: string;
}

type Props = Pick<ICookieConsentProps, 'language' | 'otherProp'>

function CookieConsent({ language }: Required<Props>) {
    useEffect(() => {
        LanguageHelper.setLanguageFile(language || "en"); <--- PROBLEM HERE !
    }, [language]);

    return <div className="cc__gimme-cookies"></div>;
}

CookieConsent.defaultProps = {
    language: "en",
    otherProp: "another prop"
} as Required<Props>;

Javascript相关问答推荐

JavaScript寻求、寻求和时间更新事件||Mux

为什么函数不使用以前函数返回的参数?

Express.js:以块形式发送响应

不渲染具有HTML参数的React元素

获取表格的左滚动位置

如何获取转换字节的所有8位?

使用useup时,React-Redux无法找到Redux上下文值

Websocket错误—有一个或多个保留位开启:reserved1 = 1,reserved2 = 0,reserved3 = 0

try 使用javascript隐藏下拉 Select

如何使用JavaScript拆分带空格的单词

为什么我的getAsFile()方法返回空?

如何创建返回不带`new`关键字的实例的类

当用户点击保存按钮时,如何实现任务的更改?

Vaadin定制组件-保持对javascrip变量的访问

自定义图表工具提示以仅显示Y值

AJAX POST在控制器中返回空(ASP.NET MVC)

Phaser3 preFX addGlow不支持zoom

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

如何通过Axios在GraphQL查询中发送数组

如果对象中的字段等于某个值,则从数组列表中删除对象