Я хочу создать функцию f
, которая принимает строку и создает объект, где key
- единственный набор полей.
Я также хочу, чтобы функция проверила тип интерфейса A
, чтобы убедиться, что поле key
является единственным обязательным полем объекта. (Будут другие необязательные поля).
Проблема:
Можно ли выразить тип A
так, чтобы функция f
была действительной - и не вызывала ошибки типа - и все же правильно проверяла A
типы при использовании?
export function f<A extends { key: string }>(key: string): A {
return { key }; // This produces compile error TS2322: (see below)
}
// This be a few different interfaces, but they all have in common that
// the key-field is the only required field.
interface WithKey {
key: string;
ignoreMe?: string;
}
const result = f<WithKey>('myKey');
Ошибка компилятора:
TS2322: Введите '{ключ: строка; } 'не может быть назначен типу' A '. '{ключ: строка; } 'назначается ограничению типа' A ', но' A 'может быть создан с другим подтипом ограничения' {key: string; } '.