Typescript中的动态类型赋值问题

xwbd5t1u  于 2023-04-22  发布在  TypeScript
关注(0)|答案(1)|浏览(159)

从其他文件导入以下资源,由于所有权限制(我不拥有它),无法更改:

//otherfile.ts
    //============
    export type Maybe<T> = T | null;
    export type Scalars = {
      ID: string;
      String: string;
      Int: number;
      AWSDateTime: any;
    };
        export interface SortOption {
          label: string;
          order: "asc" | "desc";
          key: string;
          id: string;
        }
        export type Asset = {
          typename?: 'Asset';
          updated_by?: Maybe<Scalars['String']>;
          license_plate?: Maybe<Scalars['Int']>;
          length?: Maybe<Scalars['Int']>;
        }
        export const SORT_OPTIONS: SortOption[] = [
          {
            order: "desc",
            key: "updated_date",
            label:"A",
            id:"A"
          },
        ]

这是消耗上面的代码。我拥有这段代码,并有自由改变这里的任何东西。

//consumer.ts
//===========
    //import the above stuff here
    import { sortBy } from "lodash";
    type SortOptionKey = keyof Asset;

    
    export const getSortedAssetsByOrder = (
      assets: Asset[],
      key:  SortOptionKey & keyof Partial<Asset>,
    ) => {
        return sortBy(assets, (x) => x[key]).reverse();
    };

获取函数在另一个文件中使用的错误
“string”类型的参数不能分配给“keyof Asset”类型的参数。
return getSortedAssetsByOrder(result,sortOption.key,sortOption.order);
我在consumer.ts中有哪些选项可以解决此问题?

jvidinwx

jvidinwx1#

尽管缺少一些细节,但问题是SortOptionKeykeyof Asset是不同的东西。SortOptionKey可能有一些Asset中不存在的值,因此,您应该接受Asset中的值。只需将key类型修改为

key: SortOptionKey & keyof Asset

相当于SortOptionKeykeyof Asset的相互作用

相关问题