Краткий ответ:
Вместо этого const typeRegistry = getTypeRegistry();
выполните:
const typeRegistry.register({
Kind: {
'stuff': 'Vec<u32>'
}
});
Более длинный ответ
Когда вы звоните typeRegistry.register({ Kind });
, вы пытаетесь зарегистрировать класс Typescript в качестве пользовательского типа в реестре, но типы, которые необходимо передать в реестр типов API, не имеют ничего общего с типами Typescript. эти два непосредственно не связаны друг с другом.
Событие, если вы будете писать простой Javascript, вам необходимо зарегистрировать свои собственные типы подложек в API Polkadot-JS.
Типы, передаваемые в API, используются для декодирования и кодирования данных, которые вы отправляете и получаете в / из вашего субстратного узла. Они совместимы с кодеком SCALE, который также реализован в коде Rust ядра Substrate. Использование этих типов гарантирует, что данные могут быть правильно декодированы и закодированы в разных средах и на разных языках.
Подробнее об этом можно прочитать здесь: https://substrate.dev/docs/en/overview/low-level-data-format
Представление этих типов в Javascript - это то, что указано в «Типах кодеков» в документации Polkadot-JS:
https://polkadot.js.org/api/types/#codec-types
Все остальные типы, которые вы найдете в документации Polkadot-JS, являются расширениями этих типов кодеков низкого уровня.
Все, что вам нужно передать JS-API, - это все пользовательские типы всех ваших пользовательских модулей подложки, чтобы API знал, как дешифровать и кодировать ваши данные, так что в вашем случае вы объявили здесь, в Rust
pub struct Kind {
stuff: Vec<u32>,
}
должно быть зарегистрировано следующим образом в Javascript:
const typeRegistry.register({
Kind: {
'stuff': 'Vec<u32>'
}
});
С другой стороны, ваш Typescript предназначен для того, чтобы убедиться, что данные, которые вы обрабатываете на стороне клиента в вашем интерфейсе, написанном на машинописном шрифте, имеют правильные типы.
Они нужны только Typescript, и они добавляют дополнительный уровень безопасности, но сами типы не нужны для взаимодействия с API. Ваши данные, безусловно, должны иметь правильный формат, чтобы избежать ошибок.
Вы можете думать о https://www.npmjs.com/package/@polkadot/types как о специфической для Субстрата / Полкадо версии https://github.com/DefinitelyTyped/DefinitelyTyped
Но даже если вы не используете Typescript, https://polkadot.js.org/api/types/ по-прежнему на 100% используется для перехода.