Я новичок в машинописи и у меня есть вопрос о том, что я не могу выглядеть в позе Googleable.
Предположим, я определил этот интерфейс:
interface MyInterface {
myField: "myValue"
}
Я хочу написать эту строку кода:
const value = MyInterface.myField; // expect value to equal "myValue"
Это не компилируется, но мне интересно, есть ли способ добиться такого поведения. Поскольку значение myField определяется во время компиляции машинописного текста, я считаю, что это должно быть возможно. Но я не могу понять, как это сделать.
Любой совет приветствуется. Спасибо!
Обновление:
Полагаю, мне нужно предоставить больше информации. Я пытаюсь уменьшить шаблон и поддерживать безопасность типов в приложении с избыточностью, следуя этой статье:
https://medium.com/@resir014/a-type-safe-approach-to-redux-stores-in-typescript-6474e012b81e
Я также использую Redux-Saga, и, по сути, я пытаюсь создать безопасное для всех принятие каждого.
Предположим, у меня есть два действия, определенные как интерфейсы, как предложено в статье выше:
import { Action } from 'redux'
interface MyActionA extends Action {
typeString: "MyActionA",
payload: {
// omitted
}
}
interface MyActionB extends Action {
typeString: "MyActionB",
payload: {
// omitted
}
}
type MyActionBase =
| MyActionA
| MyActionB
Есть ли какой-нибудь правильный способ написать следующее?
function* typeSafeTakeEvery<ActionType extends MyActionBase>(saga: Function) {
const typeString = ActionType.typeString; // <-- I don't know how to write this line
yield takeEvery(typeString, function*(action: ActionType) {
yield saga(action);
});
}
Для любого данного экземпляра этой универсальной функции ему известен статический тип ActionType (либо MyActionA или MyActionB), и что он должен иметь поле «typeString» с «типом» либо «MyActionA», либо «MyActionB». Я хочу использовать этот «тип» в качестве постоянного значения и передать его фактической функции takeEvery.
Я просто далеко отсюда?