打字稿中是否有任何方法可以指定此函式將回傳一個物件并且物件值將是小寫?
這就是我現在所擁有的:
const lowercaseObjValues = <T extends Record<keyof T, string>>(
obj: T
) => {
return Object.keys(obj).reduce((acc: T, key: string) => {
acc[key] = obj[key].toLowerCase();
return acc;
}, {} as T);
};
uj5u.com熱心網友回復:
這種函式只有在字串值是靜態已知的情況下才會真正有用。
// helper function to add types to Object.entries
const entries = Object.entries as <T>(obj: T) => [keyof T, T[keyof T]][];
type LowercaseValues<T extends Record<string, string>> = { [K in keyof T]: Lowercase<T[K]> };
const lowercaseValues = <T extends Record<string, string>>(obj: T): LowercaseValues<T> =>
entries(obj).reduce((acc, [key, value]) => {
// i'm sure this explicit `any` can be removed but it can be left as an
// exercise for the reader
acc[key] = value.toLowerCase() as any;
return acc;
}, {} as LowercaseValues<T>);
const test = { a: 'UPPER' } as const;
const out = lowercaseValues(test);
declare const assert: <T>(a: T) => void;
assert<'UPPER'>(test.a);
assert<'upper'>(out.a);
打字稿游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/375610.html
標籤:打字稿
上一篇:無法將值從組件傳遞到模板
下一篇:用戶定義的型別保護功能和型別縮小
