[Править - заключительное замечание]: Оказалось, что приведенный ниже вопрос был в основном результатом некоторых неоптимальных типизаций, и обычно у вас может не быть таких проблем, как у меня в моей программе => теперь, зная это, мой вопрос похоже, больше не имеет особого смысла (как уже упоминалось ниже).
Пожалуйста, взгляните на следующий фрагмент кода TypeScript. Как B extends A
эта строка c: 8
, конечно, разрешена. Как мне изменить типы function f
, чтобы запретить другие ключи рядом с a
и b
?
type A = { a: number, b: number }
function f<B extends A>(b: B): void {
}
f({
a: 3,
b: 4,
c: 8 // <- This shall cause a compile error
})
" Demo
PS : Конечно, function f(b: A) {}
- это не то, что я ищу. Этот пример здесь просто упрощен, реальный вариант использования намного сложнее ... важно, чтобы function f
оставался общим c.
[Edit]: Поскольку мое упрощение выше вызвало некоторую путаницу: пожалуйста, найдите здесь более сложный пример, где ответ на мой вопрос выше может помочь (воображаемый API компонента пользовательского интерфейса):
Пожалуйста, имейте посмотрите на ошибку типа в Demo-A. Это должно быть исправлено в Demo-B.
Demo-A (с ошибкой типа)
Demo -B (без ошибки типа)
Но, как вы можете видеть в Demo-B, теперь вы можете добавлять недопустимые параметры в конфигурацию компонента - что не очень хорошо ... и поэтому я спросил вопрос выше.
[Изменить - позже] Не ответ на мой вопрос выше, но, по крайней мере, следующее изменение установка Demo-B должна работать должным образом: Demo- C