对扩展参数使用 typescript 泛型
Use of typescript generics for extended parametres
我的目的很简单:我想找到一种将泛型用于扩展参数的方法,在这个例子中,throwData
是我感兴趣的东西。我想要的不是 any
使用更多信息,例如通用的。有什么办法可以做到这样吗?
titleStylesCondition<
IP extends {
hasOwnProperty: (a: string) => boolean;
throwData?: any;
title?: string;
}
>(itemProps: IP) {
const { palette, isDark } = this.context;
const styles = getStyles(palette, isDark);
const titleStyles = this.get("props.titleStyles", {});
if (
itemProps.hasOwnProperty("Industry") ||
itemProps.throwData.hasOwnProperty("Auto") ||
itemProps.title === "BMW"
) {
return styles.autoStyling;
}
当然,只需添加另一个泛型来保存其类型:
titleStylesCondition<
IP extends {
hasOwnProperty: (a: string) => boolean;
throwData?: ThrowData;
title?: string;
},
ThrowData,
>(itemProps: IP) {
大多数时候,TypeScript 可以正确地推断出这个 ThrowData
泛型。
我的目的很简单:我想找到一种将泛型用于扩展参数的方法,在这个例子中,throwData
是我感兴趣的东西。我想要的不是 any
使用更多信息,例如通用的。有什么办法可以做到这样吗?
titleStylesCondition<
IP extends {
hasOwnProperty: (a: string) => boolean;
throwData?: any;
title?: string;
}
>(itemProps: IP) {
const { palette, isDark } = this.context;
const styles = getStyles(palette, isDark);
const titleStyles = this.get("props.titleStyles", {});
if (
itemProps.hasOwnProperty("Industry") ||
itemProps.throwData.hasOwnProperty("Auto") ||
itemProps.title === "BMW"
) {
return styles.autoStyling;
}
当然,只需添加另一个泛型来保存其类型:
titleStylesCondition<
IP extends {
hasOwnProperty: (a: string) => boolean;
throwData?: ThrowData;
title?: string;
},
ThrowData,
>(itemProps: IP) {
大多数时候,TypeScript 可以正确地推断出这个 ThrowData
泛型。